using System.Linq;
using EmbyToolbox.Services;
namespace EmbyToolbox.ViewModels;
/// Списки для ComboBox в окне настроек (синхронизированы с MainWindowViewModel).
public sealed class ConversionFormOptions
{
public List ContainerOptions { get; } = ["MKV", "MP4", "MOV", "WEBM"];
public List VideoCodecOptions { get; } = ["H.264", "H.265", "AV1", "Copy"];
public List PixelFormatOptions { get; } = ["yuv420p", "yuv420p10le", "yuv422p", "yuv444p"];
public List ResolutionOptions { get; } = ["Без изменений", "Максимум 2160p", "Максимум 1440p", "Максимум 1080p", "Максимум 720p"];
public List FpsOptions { get; } = ["Без изменений", "Максимум 60", "Максимум 30", "Максимум 25", "Максимум 24"];
public List AudioCodecOptions { get; } = ["AAC", "AC3", "EAC3", "Opus", "MP3", "FLAC", "Copy"];
public List AudioBitrateKbps { get; } = ["96 kbps", "128 kbps", "160 kbps", "192 kbps", "256 kbps", "320 kbps"];
public List VideoBitrateModeOptions { get; } = VideoBitratePolicy.UiOptions.ToList();
internal void RestoreListsFromSerialized(IReadOnlyList? containers,
IReadOnlyList? video,
IReadOnlyList? pixel,
IReadOnlyList? resolution,
IReadOnlyList? fps,
IReadOnlyList? audioBitrate,
IReadOnlyList? videoBitrateMode)
{
ReplaceList(ContainerOptions, containers);
ReplaceList(VideoCodecOptions, video);
ReplaceList(PixelFormatOptions, pixel);
ReplaceList(ResolutionOptions, resolution);
ReplaceList(FpsOptions, fps);
ReplaceList(AudioBitrateKbps, audioBitrate);
ReplaceList(VideoBitrateModeOptions, videoBitrateMode);
}
private static void ReplaceList(List target, IReadOnlyList? source)
{
if (source is null || source.Count == 0)
{
return;
}
target.Clear();
foreach (var s in source)
{
if (!string.IsNullOrWhiteSpace(s))
{
target.Add(s.Trim());
}
}
}
}