package com.easyagents.scheduler;

import java.time.Instant;
import java.util.Objects;

/**
 * 只执行一次的调度计划。
 *
 * @param fireAt 计划触发时间
 */
public record OnceSchedulePlan(Instant fireAt) implements SchedulePlan {

    /**
     * 校验并创建一次性调度计划。
     *
     * @throws NullPointerException 触发时间为空时抛出
     */
    public OnceSchedulePlan {
        fireAt = Objects.requireNonNull(fireAt, "fireAt must not be null");
        // Quartz 和关系数据库均以毫秒保存时间，提前归一化可保持持久化往返相等。
        fireAt = Instant.ofEpochMilli(fireAt.toEpochMilli());
    }
}
