using Flyshot.Core.Domain;

namespace Flyshot.Core.Triggering;

/// <summary>
/// 表示一次飞拍触发时间轴的完整计算结果，包含理论触发事件和运行时注入事件。
/// </summary>
public sealed class ShotTimeline
{
    /// <summary>
    /// 初始化一份已验证的触发时间轴。
    /// </summary>
    public ShotTimeline(IEnumerable<ShotEvent> shotEvents, IEnumerable<TrajectoryDoEvent> triggerTimeline)
    {
        ArgumentNullException.ThrowIfNull(shotEvents);
        ArgumentNullException.ThrowIfNull(triggerTimeline);

        ShotEvents = shotEvents.ToArray();
        TriggerTimeline = triggerTimeline.ToArray();
    }

    /// <summary>
    /// 获取所有拍照触发事件（含理论和离散化时间）。
    /// </summary>
    public IReadOnlyList<ShotEvent> ShotEvents { get; }

    /// <summary>
    /// 获取用于运行时伺服流注入的 DO 事件列表。
    /// </summary>
    public IReadOnlyList<TrajectoryDoEvent> TriggerTimeline { get; }
}
