using TeleWave.Application.Media;
using Xunit;

namespace TeleWave.Application.Tests.Media;

public class AudioTrackSelectorTests
{
    [Fact]
    public void PicksFirstPreferredLanguage_ByPriorityOrder()
    {
        // Дорожки: eng(0), rus(1), jpn(2). Предпочтение rus,eng → выбираем rus (индекс 1).
        var track = AudioTrackSelector.Select(["eng", "rus", "jpn"], ["rus", "eng"]);
        Assert.Equal(1, track);
    }

    [Fact]
    public void FallsBackToNextPreferred_WhenTopMissing()
    {
        // Нет rus — берём следующий по приоритету eng (индекс 0).
        var track = AudioTrackSelector.Select(["eng", "jpn"], ["rus", "eng"]);
        Assert.Equal(0, track);
    }

    [Fact]
    public void CaseInsensitiveMatch()
    {
        var track = AudioTrackSelector.Select(["ENG", "RUS"], ["rus"]);
        Assert.Equal(1, track);
    }

    [Fact]
    public void NoMatch_ReturnsNull_KeepingFfmpegDefault()
    {
        var track = AudioTrackSelector.Select(["eng", "jpn"], ["rus"]);
        Assert.Null(track);
    }

    [Fact]
    public void SingleTrack_ReturnsNull()
    {
        var track = AudioTrackSelector.Select(["eng"], ["eng"]);
        Assert.Null(track);
    }

    [Fact]
    public void NoPreference_ReturnsNull()
    {
        var track = AudioTrackSelector.Select(["eng", "rus"], []);
        Assert.Null(track);
    }
}
