namespace ErsatzTV.Application.ProgramSchedules;

/// <summary>
///     The items of a schedule together with computed runtime estimates. Each item carries its own
///     <see cref="ProgramScheduleItemViewModel.DurationEstimate" /> (nullable — see that property for
///     the per-mode semantics), and <see cref="TotalDurationEstimate" /> is the sum of the items that
///     could be estimated.
/// </summary>
/// <param name="Items">The schedule items, each with a nullable <c>DurationEstimate</c>.</param>
/// <param name="TotalDurationEstimate">
///     The sum of every non-null per-item estimate, i.e. a rough runtime for a single pass through the
///     estimable items. <c>null</c> when no item in the schedule could be estimated (for example a
///     schedule made up entirely of Flood items, or of collection types that are not aggregated).
///     Because unbounded items contribute nothing, this is a lower bound, never an exact schedule length.
/// </param>
public record ProgramScheduleItemsWithDurationViewModel(
    List<ProgramScheduleItemViewModel> Items,
    TimeSpan? TotalDurationEstimate);
