package com.qaup.collision.websocket.message;

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

import java.time.LocalDateTime;

/**
 * 规则执行状态WebSocket消息载荷
 * 用于实时推送规则执行状态到前端
 * 
 * @author AI Assistant
 * @since 2025-01-17
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class RuleExecutionStatusPayload {

    /**
     * 规则ID
     */
    @JsonProperty("ruleId")
    private String ruleId;

    /**
     * 规则名称
     */
    @JsonProperty("ruleName")
    private String ruleName;

    /**
     * 车辆ID
     */
    @JsonProperty("vehicleId")
    private String vehicleId;

    /**
     * 车辆类型
     */
    @JsonProperty("vehicleType")
    private String vehicleType;

    /**
     * 执行事件类型 (STARTED, COMPLETED, FAILED, TIMEOUT等)
     */
    @JsonProperty("eventType")
    private String eventType;

    /**
     * 执行状态 (PENDING, RUNNING, SUCCESS, FAILED等)
     */
    @JsonProperty("executionStatus")
    private String executionStatus;

    /**
     * 执行结果 (PASSED, VIOLATION, ERROR等)
     */
    @JsonProperty("executionResult")
    private String executionResult;

    /**
     * 执行开始时间
     */
    @JsonProperty("startTime")
    private LocalDateTime startTime;

    /**
     * 执行结束时间
     */
    @JsonProperty("endTime")
    private LocalDateTime endTime;

    /**
     * 执行耗时 (毫秒)
     */
    @JsonProperty("durationMs")
    private Long durationMs;

    /**
     * 执行位置 (WKT格式)
     */
    @JsonProperty("location")
    private String location;

    /**
     * 执行位置 - 经度
     */
    @JsonProperty("longitude")
    private Double longitude;

    /**
     * 执行位置 - 纬度
     */
    @JsonProperty("latitude")
    private Double latitude;

    /**
     * 是否执行成功
     */
    @JsonProperty("isSuccess")
    private Boolean isSuccess;

    /**
     * 是否检测到违规
     */
    @JsonProperty("isViolation")
    private Boolean isViolation;

    /**
     * 错误信息 (如果执行失败)
     */
    @JsonProperty("errorMessage")
    private String errorMessage;

    /**
     * 执行详情
     */
    @JsonProperty("executionDetails")
    private String executionDetails;

    /**
     * 规则类别
     */
    @JsonProperty("ruleCategory")
    private String ruleCategory;

    /**
     * 是否需要后续动作
     */
    @JsonProperty("requiresAction")
    private Boolean requiresAction;

    /**
     * 执行上下文
     */
    @JsonProperty("context")
    private Object context;

    /**
     * 性能指标
     */
    @JsonProperty("performanceMetrics")
    private Object performanceMetrics;
} 