using TeleWave.Domain.Broadcast;

namespace TeleWave.Application.Broadcast.Scheduling;

/// <summary>
/// Длительность заставки блока: по длине загруженного звука (иначе дефолт для синтеза), выровненная
/// вверх до кратности длине сегмента — ключевой инвариант эфирной математики. Общая для генератора
/// (слоты в плане) и резолвера заставок (рендер).
/// </summary>
public static class BumperDuration
{
    /// <summary>Длительность заставки без загруженного звука (сек) — синтезированный джингл.</summary>
    private const int DefaultSeconds = 8;

    /// <summary>Длина заставки блока (сек): по загруженному звуку либо дефолт для синтеза.</summary>
    public static double TemplateSeconds(BumperTemplate template) =>
        template.AudioDurationSeconds is { } d and > 0 ? d : DefaultSeconds;

    /// <summary>Секунды, выровненные вверх до кратности длине сегмента.</summary>
    public static int Aligned(double seconds, int segmentSeconds)
    {
        var requested = Math.Max(segmentSeconds, seconds);
        return (int)(Math.Ceiling(requested / segmentSeconds) * segmentSeconds);
    }
}
