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

namespace Jellyfin.Plugin.SRFPlay.Api.Models;

/// <summary>
/// Represents a show from the Play v3 API.
/// </summary>
public class PlayV3Show
{
    /// <summary>
    /// Gets or sets the show ID.
    /// </summary>
    [JsonPropertyName("id")]
    public string? Id { get; set; }

    /// <summary>
    /// Gets or sets the show URN.
    /// </summary>
    [JsonPropertyName("urn")]
    public string? Urn { get; set; }

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

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

    /// <summary>
    /// Gets or sets the transmission type (TV or Radio).
    /// </summary>
    [JsonPropertyName("transmission")]
    public string? Transmission { get; set; }

    /// <summary>
    /// Gets or sets the vendor/business unit.
    /// </summary>
    [JsonPropertyName("vendor")]
    public string? Vendor { get; set; }

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

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

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

    /// <summary>
    /// Gets or sets the number of episodes.
    /// </summary>
    [JsonPropertyName("numberOfEpisodes")]
    public int NumberOfEpisodes { get; set; }

    /// <summary>
    /// Gets or sets the list of topic IDs.
    /// </summary>
    [JsonPropertyName("topicList")]
    [SuppressMessage("Usage", "CA2227:Collection properties should be read only", Justification = "Required for JSON deserialization")]
    [SuppressMessage("Design", "CA1002:Do not expose generic lists", Justification = "DTO for JSON deserialization")]
    public List<string>? TopicList { get; set; }
}
