package com.qqchen.deploy.backend.workflow.dto;

import com.qqchen.deploy.backend.framework.dto.BaseDTO;
import com.qqchen.deploy.backend.workflow.enums.FormBusinessTypeEnums;
import com.qqchen.deploy.backend.workflow.enums.FormDataStatusEnums;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.time.LocalDateTime;
import java.util.Map;

/**
 * 表单数据DTO
 *
 * @author qqchen
 * @date 2025-10-24
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "表单数据DTO")
public class FormDataDTO extends BaseDTO {

    /**
     * 表单定义ID
     */
    @Schema(description = "表单定义ID", example = "1")
    private Long formDefinitionId;

    /**
     * 表单标识（冗余存储，避免JOIN）
     */
    @Schema(description = "表单标识", example = "employee_info_form")
    private String formKey;

    /**
     * 表单版本（冗余存储，用于历史追溯）
     */
    @Schema(description = "表单版本", example = "1")
    private Integer formVersion;

    /**
     * 表单分类ID（冗余存储，便于统计和查询）
     */
    @Schema(description = "表单分类ID", example = "1")
    private Long categoryId;

    /**
     * 表单分类信息（用于展示）
     */
    @Schema(description = "表单分类信息")
    private FormCategoryDTO category;

    /**
     * 业务标识（如工作流实例ID、订单号等）
     */
    @Schema(description = "业务标识", example = "workflow_instance_123")
    private String businessKey;

    /**
     * 业务类型（WORKFLOW-工作流、ORDER-订单、STANDALONE-独立表单）
     */
    @Schema(description = "业务类型")
    private FormBusinessTypeEnums businessType;

    /**
     * 表单填写数据（用户提交的实际数据）
     */
    @Schema(description = "表单填写数据")
    private Map<String, Object> data;

    /**
     * 表单Schema快照（用于历史追溯，确保数据可还原，原样存储）
     */
    @Schema(description = "表单Schema快照")
    private Map<String, Object> schemaSnapshot;

    /**
     * 提交人
     */
    @Schema(description = "提交人", example = "admin")
    private String submitter;

    /**
     * 提交时间
     */
    @Schema(description = "提交时间", example = "2025-10-24T12:00:00")
    private LocalDateTime submitTime;

    /**
     * 状态（DRAFT-草稿、SUBMITTED-已提交、COMPLETED-已完成、REJECTED-已拒绝）
     */
    @Schema(description = "状态")
    private FormDataStatusEnums status;
}

