package com.aegis.emergency.report.domain;

import com.aegis.common.core.domain.BaseEntity;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableName;
import com.baomidou.mybatisplus.extension.handlers.JacksonTypeHandler;
import com.fasterxml.jackson.annotation.JsonFormat;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.fasterxml.jackson.databind.ser.std.ToStringSerializer;
import lombok.Getter;
import lombok.Setter;
import lombok.ToString;

import java.util.Date;
import java.util.Map;

/**
 * 省厅上报记录实体类 event_province_report
 * 
 * @author aegis
 */
@Getter
@Setter
@ToString(callSuper = true)
@TableName(value = "event_province_report", autoResultMap = true)
public class ProvinceReport extends BaseEntity {

    private static final long serialVersionUID = 1L;

    /** 上报记录ID */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long id;

    /** 事件ID */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long eventId;

    /** 使用的模板ID */
    @JsonSerialize(using = ToStringSerializer.class)
    private Long templateId;

    /** 上报类型：initial-首次上报，followup-续报 */
    private String reportType;

    /** 上报序号（第几次上报，从1开始） */
    private Integer reportSequence;

    /** 动态字段数据（JSON格式，根据模板fields结构存储） */
    @TableField(typeHandler = JacksonTypeHandler.class)
    private Map<String, Object> fields;

    /** 上报状态：pending-待上报，submitting-上报中，success-成功，failed-失败，retry-重试中 */
    private String status;

    /** 请求数据（发送给省厅的完整请求体，JSON格式） */
    @TableField(typeHandler = JacksonTypeHandler.class)
    private Map<String, Object> requestPayload;

    /** 响应数据（省厅返回的响应体，JSON格式） */
    @TableField(typeHandler = JacksonTypeHandler.class)
    private Map<String, Object> responsePayload;

    /** 重试次数（最多3次） */
    private Integer retryCount;

    /** 最后重试时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date lastRetryTime;

    /** 错误信息（失败时记录） */
    private String errorMessage;

    /** 删除标志（0代表存在 2代表删除） */
    private String delFlag;

    // ========== 查询条件字段（非数据库字段） ==========
    
    /** 事件编号（关联查询字段） */
    @TableField(exist = false)
    private String eventNo;

    /** 事件标题（关联查询字段） */
    @TableField(exist = false)
    private String eventTitle;

    /** 事件级别（关联查询字段） */
    @TableField(exist = false)
    private String eventLevel;

    /** 模板名称（关联查询字段） */
    @TableField(exist = false)
    private String templateName;

    /** 上报时间范围-开始（非数据库字段） */
    @TableField(exist = false)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date beginCreateTime;

    /** 上报时间范围-结束（非数据库字段） */
    @TableField(exist = false)
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private Date endCreateTime;
}