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

namespace Jellyfin.Database.Implementations.Entities;

#pragma warning disable CS1591 // Missing XML comment for publicly visible type or member
#pragma warning disable SA1600

using System;

public class MediaStreamInfo
{
    public required Guid ItemId { get; set; }

    public required BaseItemEntity Item { get; set; }

    public int StreamIndex { get; set; }

    public required MediaStreamTypeEntity StreamType { get; set; }

    public string? Codec { get; set; }

    public string? Language { get; set; }

    public string? Profile { get; set; }

    public string? Path { get; set; }

    public int? BitRate { get; set; }

    public bool IsDefault { get; set; }

    public bool IsForced { get; set; }

    public bool IsExternal { get; set; }

    public float? Level { get; set; }

    public string? CodecTag { get; set; }

    public string? Comment { get; set; }

    public bool? IsAvc { get; set; }

    public string? Title { get; set; }

    public string? TimeBase { get; set; }

    public string? CodecTimeBase { get; set; }

    /// <summary>
    /// Gets or sets audio-specific stream details. Non-null only when <see cref="StreamType"/> is Audio.
    /// </summary>
    public AudioStreamDetails? AudioDetails { get; set; }

    /// <summary>
    /// Gets or sets video-specific stream details. Non-null only when <see cref="StreamType"/> is Video.
    /// </summary>
    public VideoStreamDetails? VideoDetails { get; set; }
}
