using TeleWave.Application.Common.Interfaces;
using TeleWave.Application.Programming.Groups;
using TeleWave.Application.Programming.Templates;

namespace TeleWave.Application.Tests.Support;

/// <summary>
/// Сборка сервисов группы для тестов: их четыре и они цепляются друг за друга, а в тестах нужен
/// каждый раз один и тот же набор. В приложении это делает контейнер.
/// </summary>
internal static class GroupServices
{
    public static DynamicGroupResolver Dynamic(IAppDbContext db) =>
        new(new GroupFilterMatcher(db), new GroupElementResolver(db));

    public static GroupStatsService Stats(IAppDbContext db) =>
        new(db, new GroupElementResolver(db), Dynamic(db));

    /// <summary>Писатель слотов: ему нужен ещё и признак «группа роликов» — их в слот не пускают.</summary>
    public static InterstitialGroups Interstitials(IAppDbContext db) => new(db);

    public static SlotWriter Slots(IAppDbContext db) => new(db, Interstitials(db));
}
