using LiteCqrs;
using TeleWave.Application.Common.Models;
using TeleWave.Application.Programming.Planning.ApplyTemplate;
using TeleWave.Domain.Programming.Planning;

namespace TeleWave.Application.Programming.Planning.Preview;

/// <summary>
/// Прогон генератора по текущим правилам без записи: что было бы в эфире, если применить сейчас.
/// Курсоры слотов не двигаются, поэтому предпросмотр можно жать сколько угодно раз.
/// </summary>
public sealed record PreviewScheduleQuery(Guid ChannelId, int Days = 1)
    : IQuery<Result<SchedulePreviewDto>>;

/// <summary>Запись предполагаемой ленты. Заставка приходит без ассета — он рендерится при применении.</summary>
public sealed record PreviewItemDto(
    PlannedItemKind Kind,
    DateTimeOffset StartsAtUtc,
    DateTimeOffset EndsAtUtc,
    Guid? ShowId,
    string? Title,
    Guid? SlotId,
    string? SlotTitle
);

public sealed record SchedulePreviewDto(
    DateTimeOffset FromUtc,
    DateTimeOffset ToUtc,
    /// <summary>Время канала: лента отдаётся в UTC, а показывается в нём.</summary>
    int UtcOffsetMinutes,
    IReadOnlyList<PreviewItemDto> Items,
    IReadOnlyList<PlanningWarningDto> Warnings
);
