package com.sz.admin.monitor.pojo.dto.edgebox;

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.NoArgsConstructor;
import lombok.AllArgsConstructor;
import lombok.Builder;

import java.io.Serializable;
import java.util.List;

/**
 * 边缘盒子算法任务配置 DTO
 * 对应下发给盒子的 JSON 结构
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class AlgorithmTaskDTO implements Serializable {

    private Long id;
    /**
     *  摄像机id
     */
    private Long cameraId;
    /**
     * 任务会话名称 (建议使用唯一标识或 UUID)
     */
    @JsonProperty("AlgTaskSession")
    private String algTaskSession;

    /**
     * 摄像头名称 (如: "cam66" 或 "机柜球机")
     */
    @JsonProperty("MediaName")
    private String mediaName;

    /**
     *  访问第三方服务器的url
     */
    private String url;


    /**
     * 任务描述
     */
    @JsonProperty("TaskDesc")
    private String taskDesc;


    /**
     * 需要配置的算法 ID 列表
     * 例如: [8, 52] (8-烟火, 52-人脸)
     */
    @JsonProperty("AlgInfo")
    private List<Integer> algInfo;


    /**
     * 核心算法参数配置 (嵌套对象)
     */
    @JsonProperty("UserData")
    private UserDataDto userData;

    @Data
    @Builder
    @NoArgsConstructor
    @AllArgsConstructor
    public static class UserDataDto implements Serializable {

        /**
         * 方法配置 ID 列表
         */
        @JsonProperty("MethodConfig")
        private List<Integer> methodConfig;

        /**
         * 是否启用烟火误报过滤 (true: 开启过滤, false: 高灵敏度)
         */
        @JsonProperty("enable_fire_smoke_filter")
        private Boolean enableFireSmokeFilter;

        /**
         * 火焰置信度阈值 (0.0 - 1.0)
         */
        @JsonProperty("fire_threshold")
        private Double fireThreshold;

        /**
         * 烟雾置信度阈值 (0.0 - 1.0)
         */
        @JsonProperty("smoke_threshold")
        private Double smokeThreshold;

        /**
         * 烟火持续时长 (秒)，需持续多久才报警
         */
        @JsonProperty("fire_smoke_keep_sec")
        private Integer fireSmokeKeepSec;

        /**
         * 烟火告警间隔 (秒)
         */
        @JsonProperty("fire_smoke_alarm_interval_sec")
        private Integer fireSmokeAlarmIntervalSec;

        /**
         * 人脸比对相似度阈值
         */
        @JsonProperty("face_reg_similarity")
        private Double faceRegSimilarity;

        /**
         * 是否启用 GA/T-1400 标准
         */
        @JsonProperty("face_reg_enable_gat1400")
        private Boolean faceRegEnableGat1400;

        /**
         * 是否启用多次确认 (防抖动)
         */
        @JsonProperty("face_reg_enable_multi_check")
        private Boolean faceRegEnableMultiCheck;

        /**
         * 陌生人阈值 (低于此值视为陌生人)
         */
        @JsonProperty("face_low_similarity")
        private Double faceLowSimilarity;

        /**
         * 人脸ID重复上报间隔 (毫秒)
         */
        @JsonProperty("face_id_upload_interval_ms")
        private Integer faceIdUploadIntervalMs;

        /**
         * 最小人脸像素 (例如 30px)
         */
        @JsonProperty("front_face_min_pixel")
        private Integer frontFaceMinPixel;

        /**
         * 人脸库 ID (例如 1)
         */
        @JsonProperty("face_repositories")
        private Integer faceRepositories;

        /**
         * 是否启用火焰深度模式
         */
        @JsonProperty("enable_fire_deep_mode")
        private Boolean enableFireDeepMode;

        /**
         * 人脸检测基础阈值
         */
        @JsonProperty("threshold_for_face")
        private Double thresholdForFace;

        /**
         * 启用 GA/T-1400
         */
        @JsonProperty("capture_is_gat1400_enable")
        private Boolean captureIsGat1400Enable;

        /**
         *  扩大脸部区域
         */
        @JsonProperty("expand_face_area")
        private Boolean expandFaceArea;

        /**
         *  更新间隔
         */
        @JsonProperty("face_repeat_upload_ms")
        private Integer faceRepeatUploadMs;

        /**
         * 抓拍阈值
         */
        @JsonProperty("front_face_threshold")
        private Double frontFaceThreshold;

        /**
         * 仅上报正脸
         */
        @JsonProperty("is_front_only")
        private Boolean isFrontOnly;

        /**
         *  上传裁剪的人脸图
         */
        @JsonProperty("upload_cropped_face_image")
        private Boolean uploadCroppedFaceImage;

        /**
         * 安全帽阈值
         */
        @JsonProperty("helmet_det_threshold")
        private Double helmetDetThreshold;

        /**
         * 无安全帽阈值
         */
        @JsonProperty("no_helmet_det_threshold")
        private Double noHelmetDetThreshold;

        /**
         * 违规持续时长
         */
        @JsonProperty("helmet_v3_keep_no_sec")
        private Integer helmetV3KeepNoSec;
    }
}