package com.nbport.zgwl.manifest.dto;

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

import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;
import java.util.ArrayList;
import java.util.List;

/**
 * 合同模板对象
 *
 * 这里直接用 DTO 承载页面需要的字段，方便前后端对接。
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class ContractTemplateDto implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /** 主键ID */
    private Long id;

    /**
     * 范本编号，保存时后端自动生成。
     */
    private String templateCode;

    /** 模板名称 */
    private String templateName;

    /**
     * 范本类型：标准模板 / 推荐文本 / 示范文本 / 对方文本
     */
    private String source;

    /** 合同类型（如 买卖合同、服务合同 等） */
    private String contractType;


    /** 版本号 */
    private String version;

    /**
     * 状态：draft / published / disabled
     */
    private String status;

    /** 变量数量（由 variableMappings 自动计算） */
    private Integer variableCount;

    /** 模板描述 */
    private String description;

    /** 使用提示 */
    private String usageTip;

    /** 模板文件名（上传时的原始文件名） */
    private String templateFileName;

    /**
     * 模板文件相对路径
     */
    private String templateFilePath;

    /**
     * 发布范围 orgId 集合
     */
    @Builder.Default
    private List<String> publishOrgIds = new ArrayList<>();

    /**
     * 发布范围 orgName 集合
     */
    @Builder.Default
    private List<String> publishOrgNames = new ArrayList<>();

    /**
     * 为列表直接展示准备的文本。
     */
    private String publishScopeText;

    /** 变量映射列表（Word 模板变量 → 业务字段的绑定关系） */
    @Builder.Default
    private List<TemplateVariableMappingDto> variableMappings = new ArrayList<>();

    /** 模板中用到的变量名列表（由 variableMappings 自动提取） */
    @Builder.Default
    private List<String> variables = new ArrayList<>();

    /** 创建人 */
    private String createBy;

    /** 创建时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime createdTime;

    /** 更新人 */
    private String updatedBy;

    /** 更新时间 */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss", timezone = "GMT+8")
    private LocalDateTime updatedTime;

    /** 删除标记 */
    private String delFlag;

    /**
     * 以下两个字段只在数据库层临时承接 JSON 文本，不给页面直接使用。
     */
    /** 发布范围 orgId 的 JSON 文本 */
    private String publishOrgIdsJson;

    /** 发布范围 orgName 的 JSON 文本 */
    private String publishOrgNamesJson;

    /** 变量映射的 JSON 文本 */
    private String variableMappingsJson;
}
