using LiteCqrs;
using TeleWave.Application.Common.Models;

namespace TeleWave.Application.Programming.Planning.Diff;

/// <summary>
/// Что изменится в эфире, если применить правила сейчас (см. 6.6). Прогон сухой: ни лента,
/// ни курсоры слотов не трогаются.
/// </summary>
public sealed record PreviewApplyDiffQuery(Guid ChannelId) : IQuery<Result<ScheduleDiffDto>>;

/// <summary>Одно расхождение: что стоит в эфире сейчас и что встанет после применения.</summary>
public sealed record ScheduleChangeDto(
    DateTimeOffset StartsAtUtc,
    string? Before,
    string? After,
    /// <summary>Попадает ли в ближайшие сутки — самая частая причина случайного ущерба.</summary>
    bool Soon
);

public sealed record ScheduleDiffDto(
    /// <summary>Сколько будущих записей затрагивает пересборка.</summary>
    int Total,
    int Changed,
    int ChangedSoon,
    /// <summary>Первые расхождения; сколько осталось за списком, видно по <c>Changed</c>.</summary>
    IReadOnlyList<ScheduleChangeDto> Changes
);
