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

import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;
import lombok.ToString;
import java.io.Serializable;
import java.util.List;

/**
 */
@Data
public class AlarmReportDTO implements Serializable {


    /**
     * 告警唯一标识 (用于去重)
     */
    @JsonProperty("AlarmId")
    private String alarmId;

    /**
     * 设备 IP (用于区分是哪个盒子发来的)
     */
    @JsonProperty("BoardIp")
    private String boardIp;

    /**
     * 告警类型标识
     */
    @JsonProperty("Summary")
    private String summary;

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

    /**
     *  任务的标识
     */
    @JsonProperty("TaskSession")
    private String taskSession;

    /**
     * 告警时间字符串 (2023-12-12 16:36:37)
     */
    @JsonProperty("Time")
    private String time;


    /**
     * 告警图 (Base64)
     *
     */
    @JsonProperty("ImageData")
    private String imageData;

    /**
     * 标注图 (画了框的图，Base64)
     */
    @JsonProperty("ImageDataLabeled")
    private String imageDataLabeled;

    /**
     * 标注图本地路径 (用于前端展示)
     */
    @JsonProperty("LocalLabeledPath")
    private String localLabeledPath;

    @JsonProperty("LocalRawPath")
    private String localRawPath;

    @JsonProperty("Result")
    private SimpleResult result;


    @Data
    public static class SimpleResult {
        
        /**
         * 告警中文描述 (如: "未佩戴安全帽")
         */
        @JsonProperty("Description")
        private String description;

        /**
         * 详细属性列表 (如: 置信度、人脸小图等)
         */
        @JsonProperty("Properties")
        private List<SimpleProperty> properties;
    }

    @Data
    public static class SimpleProperty {
        /**
         * 属性名 (如: FrontFaceScore)
         */
        @JsonProperty("property")
        private String property;

        /**
         * 属性中文名 (如: 人脸置信度)
         */
        @JsonProperty("desc")
        private String desc;

        /**
         * 属性值 (可能是数字、字符串或 Base64)
         */
        @JsonProperty("value")
        @ToString.Exclude
        private Object value;
    }
}