package com.cmvr.inspection.domain.dto.alert;

import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
import com.fasterxml.jackson.annotation.JsonProperty;
import lombok.Data;

import java.util.List;

/**
 * PPE 违规报警业务数据。
 */
@Data
@JsonIgnoreProperties(ignoreUnknown = true)
public class DetectionAlert
{
    /** 边缘端生成的全局事件标识。 */
    @JsonProperty("event_id")
    private String eventId;

    /** 命中的规则标识。 */
    @JsonProperty("rule_id")
    private String ruleId;

    /** 模型版本标识。 */
    @JsonProperty("model_id")
    private String modelId;

    /** 模型显示名称。 */
    @JsonProperty("model_name")
    private String modelName;

    /** 命中的标签集合。 */
    @JsonProperty("labels")
    private List<String> labels;

    /** 规则统计范围。 */
    @JsonProperty("scope")
    private String scope;

    /** 规则统计范围对应的对象标识。 */
    @JsonProperty("scope_id")
    private String scopeId;

    /** 时间窗口内命中次数。 */
    @JsonProperty("hit_count")
    private Integer hitCount;

    /** 规则统计窗口，单位毫秒。 */
    @JsonProperty("window_ms")
    private Double windowMs;

    /** 首次命中时间，Unix 纳秒时间戳。 */
    @JsonProperty("first_seen_ns")
    private Long firstSeenNs;

    /** 最后命中时间，Unix 纳秒时间戳。 */
    @JsonProperty("last_seen_ns")
    private Long lastSeenNs;

    /** 触发报警时间，Unix 纳秒时间戳。 */
    @JsonProperty("triggered_at_ns")
    private Long triggeredAtNs;

    /** 本次报警中的最大置信度。 */
    @JsonProperty("max_confidence")
    private Double maxConfidence;

    /** 报警关联的检测框。 */
    @JsonProperty("detections")
    private List<Detection> detections;

    /** 报警现场图片，允许为空。 */
    @JsonProperty("image")
    private AlertImage image;
}
