using TeleWave.Application.Media.ManualInbox;
using Xunit;

namespace TeleWave.Application.Tests.Media;

public class ImportManualInboxValidatorTests
{
    private static ImportManualInboxCommand Command(int? season, int? episode) =>
        new([new ManualImportItem("Шоу/файл.mkv", season, episode)], Guid.NewGuid());

    [Theory]
    [InlineData(1, 0)] // пилот идёт как E00 — это норма, а не ошибка ввода
    [InlineData(0, 1)] // спецвыпуски живут в нулевом сезоне
    [InlineData(1, 1)]
    [InlineData(99, 999)]
    [InlineData(null, null)] // номера не заданы — сервер разберёт имя сам
    public void AllowsRealWorldNumbers(int? season, int? episode)
    {
        Assert.True(
            new ImportManualInboxCommandValidator().Validate(Command(season, episode)).IsValid
        );
    }

    [Theory]
    [InlineData(-1, 1)]
    [InlineData(100, 1)]
    [InlineData(1, -1)]
    [InlineData(1, 1000)]
    public void RejectsOutOfRange(int? season, int? episode)
    {
        Assert.False(
            new ImportManualInboxCommandValidator().Validate(Command(season, episode)).IsValid
        );
    }

    [Fact]
    public void RejectsEmptyBatchAndMissingShow()
    {
        var validator = new ImportManualInboxCommandValidator();

        Assert.False(validator.Validate(new ImportManualInboxCommand([], Guid.NewGuid())).IsValid);
        Assert.False(
            validator
                .Validate(
                    new ImportManualInboxCommand(
                        [new ManualImportItem("файл.mkv", 1, 1)],
                        Guid.Empty
                    )
                )
                .IsValid
        );
    }
}
