// <copyright file="BaseItemLiveTvExtras.cs" company="PlaceholderCompany">
// Copyright (c) PlaceholderCompany. All rights reserved.
// </copyright>

namespace Jellyfin.Database.Implementations.Entities;

using System;

/// <summary>
/// Extension table for LiveTV-specific columns on <see cref="BaseItemEntity"/>.
/// Populated only for LiveTvProgram and LiveTvChannel items.
/// </summary>
public class BaseItemLiveTvExtras
{
    /// <summary>
    /// Gets or sets the ID of the parent <see cref="BaseItemEntity"/>. Primary key and foreign key.
    /// </summary>
    public required Guid ItemId { get; set; }

    /// <summary>
    /// Gets or sets the navigation back to the owning <see cref="BaseItemEntity"/>.
    /// </summary>
    public BaseItemEntity? Item { get; set; }

    /// <summary>
    /// Gets or sets the scheduled start date/time of the program.
    /// </summary>
    public DateTime? StartDate { get; set; }

    /// <summary>
    /// Gets or sets the scheduled end date/time of the program.
    /// </summary>
    public DateTime? EndDate { get; set; }

    /// <summary>
    /// Gets or sets the episode title for the program, if it is an episode broadcast.
    /// </summary>
    public string? EpisodeTitle { get; set; }

    /// <summary>
    /// Gets or sets the series ID used to correlate this program to its show. Populated for LiveTvProgram.
    /// </summary>
    public string? ShowId { get; set; }

    /// <summary>
    /// Gets or sets the external series identifier. Populated for LiveTvProgram.
    /// </summary>
    public string? ExternalSeriesId { get; set; }

    /// <summary>
    /// Gets or sets the service name for the channel. Populated for LiveTvChannel.
    /// </summary>
    public string? ExternalServiceId { get; set; }

    /// <summary>
    /// Gets or sets the audio type for the program.
    /// </summary>
    public ProgramAudioEntity? Audio { get; set; }
}
