package com.ycwl.basic.model.pc.device.req;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;

import jakarta.validation.constraints.NotBlank;
import jakarta.validation.constraints.NotNull;

import java.util.ArrayList;
import java.util.Collections;
import java.util.Date;
import java.util.List;

/**
 * 外部工具上报视频连续性检查结果的请求DTO
 *
 * @author Claude Code
 * @date 2025-12-30
 */
@Data
@NoArgsConstructor
@AllArgsConstructor
public class VideoContinuityReportReq {

    /**
     * 设备编号（必填）
     */
    @NotBlank(message = "设备编号不能为空")
    private String deviceNo;

    /**
     * 检查的开始时间（必填）
     */
    @NotNull(message = "检查开始时间不能为空")
    private Date startTime;

    /**
     * 检查的结束时间（必填）
     */
    @NotNull(message = "检查结束时间不能为空")
    private Date endTime;

    /**
     * 是否支持连续性检查（必填）
     */
    @NotNull(message = "是否支持连续性检查不能为空")
    private Boolean support;

    /**
     * 视频是否连续（必填）
     * true: 所有间隙都在允许范围内
     * false: 存在超出允许范围的间隙
     */
    @NotNull(message = "视频是否连续不能为空")
    private Boolean continuous;

    /**
     * 视频总数（必填）
     */
    @NotNull(message = "视频总数不能为空")
    private Integer totalVideos;

    /**
     * 总时长，单位毫秒（必填）
     */
    @NotNull(message = "总时长不能为空")
    private Long totalDurationMs;

    /**
     * 允许的最大间隙，单位毫秒（选填，默认2000ms）
     */
    private Long maxAllowedGapMs;

    /**
     * 间隙列表（选填，当continuous=false时应提供）
     */
    private List<GapInfoReq> gaps = Collections.emptyList();

    /**
     * 间隙信息
     */
    @Data
    @NoArgsConstructor
    @AllArgsConstructor
    public static class GapInfoReq {
        /**
         * 前一个文件名
         */
        private String beforeFileName;

        /**
         * 后一个文件名
         */
        private String afterFileName;

        /**
         * 间隙时长，单位毫秒
         */
        private Long gapMs;

        /**
         * 间隙开始时间
         */
        private Date gapStartTime;

        /**
         * 间隙结束时间
         */
        private Date gapEndTime;
    }
}
