//------------------------------------------------------------------------------
// <auto-generated>
// This code was generated by Speakeasy (https://speakeasy.com). DO NOT EDIT.
//
// Changes to this file may cause incorrect behavior and will be lost when
// the code is regenerated.
// </auto-generated>
//------------------------------------------------------------------------------
#nullable enable
namespace LukeHagar.PlexAPI.SDK.Models.Requests
{
    using LukeHagar.PlexAPI.SDK.Models.Requests;
    using LukeHagar.PlexAPI.SDK.Utils;
    using Newtonsoft.Json;
    using System;
    using System.Collections.Generic;
    
    public class PlexDevice
    {

        [JsonProperty("name")]
        public string Name { get; set; } = default!;

        [JsonProperty("product")]
        public string Product { get; set; } = default!;

        [JsonProperty("productVersion")]
        public string ProductVersion { get; set; } = default!;

        [JsonProperty("platform", NullValueHandling = NullValueHandling.Include)]
        public string? Platform { get; set; }

        [JsonProperty("platformVersion", NullValueHandling = NullValueHandling.Include)]
        public string? PlatformVersion { get; set; }

        [JsonProperty("device", NullValueHandling = NullValueHandling.Include)]
        public string? Device { get; set; }

        [JsonProperty("clientIdentifier")]
        public string ClientIdentifier { get; set; } = default!;

        [JsonProperty("createdAt")]
        public DateTime CreatedAt { get; set; } = default!;

        [JsonProperty("lastSeenAt")]
        public DateTime LastSeenAt { get; set; } = default!;

        [JsonProperty("provides")]
        public string Provides { get; set; } = default!;

        /// <summary>
        /// ownerId is null when the device is owned by the token used to send the request
        /// </summary>
        [JsonProperty("ownerId", NullValueHandling = NullValueHandling.Include)]
        public long? OwnerId { get; set; }

        [JsonProperty("sourceTitle", NullValueHandling = NullValueHandling.Include)]
        public string? SourceTitle { get; set; }

        [JsonProperty("publicAddress")]
        public string PublicAddress { get; set; } = default!;

        [JsonProperty("accessToken")]
        public string AccessToken { get; set; } = default!;

        [JsonProperty("owned")]
        public bool Owned { get; set; } = default!;

        [JsonProperty("home")]
        public bool Home { get; set; } = default!;

        [JsonProperty("synced")]
        public bool Synced { get; set; } = default!;

        [JsonProperty("relay")]
        public bool Relay { get; set; } = default!;

        [JsonProperty("presence")]
        public bool Presence { get; set; } = default!;

        [JsonProperty("httpsRequired")]
        public bool HttpsRequired { get; set; } = default!;

        [JsonProperty("publicAddressMatches")]
        public bool PublicAddressMatches { get; set; } = default!;

        [JsonProperty("dnsRebindingProtection")]
        public bool DnsRebindingProtection { get; set; } = default!;

        [JsonProperty("natLoopbackSupported")]
        public bool NatLoopbackSupported { get; set; } = default!;

        [JsonProperty("connections")]
        public List<Connections> Connections { get; set; } = default!;
    }
}