using System;
using System.Collections.Generic;
using System.Text.Json.Serialization;

namespace Jellyfin.Plugin.SRFPlay.Api.Models.PlayV3;

/// <summary>
/// TV Program entry in the guide.
/// </summary>
public class PlayV3TvProgram
{
    /// <summary>
    /// Gets or sets the URN identifier.
    /// </summary>
    [JsonPropertyName("urn")]
    public string? Urn { get; set; }

    /// <summary>
    /// Gets or sets the title.
    /// </summary>
    [JsonPropertyName("title")]
    public string? Title { get; set; }

    /// <summary>
    /// Gets or sets the lead/description.
    /// </summary>
    [JsonPropertyName("lead")]
    public string? Lead { get; set; }

    /// <summary>
    /// Gets or sets the description.
    /// </summary>
    [JsonPropertyName("description")]
    public string? Description { get; set; }

    /// <summary>
    /// Gets or sets the image URL.
    /// </summary>
    [JsonPropertyName("imageUrl")]
    public string? ImageUrl { get; set; }

    /// <summary>
    /// Gets or sets the content type (e.g., SCHEDULED_LIVESTREAM).
    /// </summary>
    [JsonPropertyName("type")]
    public string? Type { get; set; }

    /// <summary>
    /// Gets or sets the media type.
    /// </summary>
    [JsonPropertyName("mediaType")]
    public string? MediaType { get; set; }

    /// <summary>
    /// Gets or sets the vendor (e.g., SRF, RTS).
    /// </summary>
    [JsonPropertyName("vendor")]
    public string? Vendor { get; set; }

    /// <summary>
    /// Gets or sets the start time.
    /// </summary>
    [JsonPropertyName("date")]
    public DateTime? Date { get; set; }

    /// <summary>
    /// Gets or sets the valid from time (for scheduled livestreams).
    /// </summary>
    [JsonPropertyName("validFrom")]
    public DateTime? ValidFrom { get; set; }

    /// <summary>
    /// Gets or sets the valid to time (for scheduled livestreams).
    /// </summary>
    [JsonPropertyName("validTo")]
    public DateTime? ValidTo { get; set; }

    /// <summary>
    /// Gets or sets the duration in milliseconds.
    /// </summary>
    [JsonPropertyName("duration")]
    public long? Duration { get; set; }

    /// <summary>
    /// Gets or sets the channel ID.
    /// </summary>
    [JsonPropertyName("channelId")]
    public string? ChannelId { get; set; }

    /// <summary>
    /// Gets or sets the channel title.
    /// </summary>
    [JsonPropertyName("channelTitle")]
    public string? ChannelTitle { get; set; }

    /// <summary>
    /// Gets or sets whether this is blocked (DRM).
    /// </summary>
    [JsonPropertyName("blocked")]
    public bool? Blocked { get; set; }

    /// <summary>
    /// Gets or sets whether this is geoblocked.
    /// </summary>
    [JsonPropertyName("geoblocked")]
    public bool? Geoblocked { get; set; }
}
