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

namespace TeleWave.Application.Programming.Planning.Trace;

/// <summary>
/// Цепочка происхождения записи — «почему это здесь» (см. 6.5). Трейс пишется в момент генерации
/// и хранится в самой записи: восстановить его потом невозможно, состав групп и правила меняются.
/// </summary>
public sealed record GetEntryTraceQuery(Guid EntryId) : IQuery<Result<EntryTraceDto>>;

public sealed record EntryTraceDto(
    Guid EntryId,
    DateTimeOffset StartsAtUtc,
    DateTimeOffset EndsAtUtc,
    string? ShowName,
    int? EpisodeIndex,
    /// <summary>Слой и слот, из которых выросла запись; null — трейс не писался (старая запись).</summary>
    string? LayerName,
    int? LayerPriority,
    string? SlotTitle,
    SlotKind? SlotKind,
    int? SlotWeekday,
    TimeOnly? SlotTargetStart,
    int? SlotDurationMinutes,
    string? GroupName,
    int? GroupItemCount,
    /// <summary>Коллекция, частью которой шла запись, — если в эфир шла франшиза, а не одиночное шоу.</summary>
    string? CollectionName,
    SlotStrategyKind? Strategy,
    int? CooldownDays,
    /// <summary>Сколько кандидатов осталось после остывания (null — выбор шёл без него).</summary>
    int? CandidatesAfterCooldown,
    int DriftMinutes,
    bool Snapped,
    string? JunctionName
);
