using System.Collections.Generic;
namespace EmbyToolbox.Models;
public sealed class TrackSettingsSnapshot
{
public string FilePath { get; init; } = string.Empty;
/// Нормализованный абсолютный каталог исходного видеофайла (родитель имени).
public string ScopeDirectory { get; init; } = string.Empty;
/// При добавлении каталогом — корень выбранной папки; при перетаскивании — общий предок каталогов батча.
public string? ScopeBatchRoot { get; init; }
public TrackStructureSignature Signature { get; init; } = new();
public IReadOnlyList Items { get; init; } = [];
}
public sealed class TrackStructureSignature
{
public IReadOnlyList Tracks { get; init; } = [];
}
public sealed class TrackStructureSignatureItem
{
public int Order { get; init; }
public MediaStreamKind StreamKind { get; init; }
public SourceKind Source { get; init; }
public string Codec { get; init; } = string.Empty;
public string Language { get; init; } = string.Empty;
public string Title { get; init; } = string.Empty;
}
public sealed class TrackSettingsSnapshotItem
{
public int Order { get; init; }
public MediaStreamKind StreamKind { get; init; }
public SourceKind Source { get; init; }
public string Codec { get; init; } = string.Empty;
public string Language { get; init; } = string.Empty;
public string Title { get; init; } = string.Empty;
public TrackActionKind Action { get; init; }
public string? Bitrate { get; init; }
public bool? Default { get; init; }
public string? TargetCodec { get; init; }
/// True, если Title в UI отличается от типового (ffprobe/filename) — тогда при apply копируем Title.
public bool SnapshotTitleWasUserEdited { get; init; }
}