using Microsoft.EntityFrameworkCore;
using TeleWave.Application.Common.Interfaces;
using TeleWave.Application.Common.Models;
using TeleWave.Domain.Programming;

namespace TeleWave.Application.Programming.Templates.Junctions;

/// <summary>Общее для всех команд стыка: загрузка шаблона и отметка правил эфира изменёнными.</summary>
internal static class JunctionLoader
{
    public static Task<JunctionTemplate?> LoadAsync(
        IAppDbContext dbContext,
        Guid junctionId,
        CancellationToken cancellationToken
    ) =>
        dbContext
            .JunctionTemplates.Include(j => j.Elements)
            .FirstOrDefaultAsync(j => j.Id == junctionId, cancellationToken);

    /// <summary>Правка стыка — тоже правка правил эфира: шаблон канала помечается изменённым.</summary>
    public static async Task<Result> MarkTemplateChangedAsync(
        IAppDbContext dbContext,
        JunctionTemplate junction,
        CancellationToken cancellationToken
    )
    {
        var template = await dbContext.ScheduleTemplates.FirstOrDefaultAsync(
            t => t.ChannelId == junction.ChannelId,
            cancellationToken
        );
        template?.MarkChanged();
        return Result.Success();
    }
}
