package com.nbport.zgwl.manifest.utils;

import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Map;
import java.util.concurrent.ThreadLocalRandom;

/**
 * 模板编号生成工具
 *
 * 需求里要求“范本编号自动生成”，这里采用：
 * TPL-合同类型编码-时间戳-随机数
 *
 * 例子：TPL-MM-20260522113045-128
 */
public final class ManifestCodeUtils {

    private static final Map<String, String> CONTRACT_TYPE_CODE_MAP = Map.ofEntries(
            Map.entry("MM", "MM"),
            Map.entry("GY", "GY"),
            Map.entry("ZY", "ZY"),
            Map.entry("JK", "JK"),
            Map.entry("BZ", "BZ"),
            Map.entry("ZL", "ZL"),
            Map.entry("RZ", "RZ"),
            Map.entry("BL", "BL"),
            Map.entry("CL", "CL"),
            Map.entry("GC", "GC"),
            Map.entry("YS", "YS"),
            Map.entry("JS", "JS"),
            Map.entry("BG", "BG"),
            Map.entry("CC", "CC"),
            Map.entry("WT", "WT"),
            Map.entry("WY", "WY"),
            Map.entry("HJ", "HJ"),
            Map.entry("ZJ", "ZJ"),
            Map.entry("HH", "HH"),
            Map.entry("YG", "YG"),
            Map.entry("YW", "YW"),
            Map.entry("QT", "QT"),
            Map.entry("YWBFP", "YWBFP"),
            Map.entry("YWBFS", "YWBFS"),
            Map.entry("YWIOP", "YWIOP"),
            Map.entry("YWIOS", "YWIOS"),
            Map.entry("YWDOP", "YWDOP"),
            Map.entry("YWDOS", "YWDOS"),
            Map.entry("YWBCP", "YWBCP"),
            Map.entry("YWBCS", "YWBCS"),
            Map.entry("YWOTP", "YWOTP"),
            Map.entry("YWOTS", "YWOTS"),
            Map.entry("买卖合同", "MM"),
            Map.entry("采购合同", "CG"),
            Map.entry("销售合同", "XS"),
            Map.entry("服务合同", "FW"),
            Map.entry("框架合同", "FJ"),
            Map.entry("供用电、水、气、热力合同", "GY"),
            Map.entry("赠与合同", "ZY"),
            Map.entry("借款合同", "JK"),
            Map.entry("保证合同", "BZ"),
            Map.entry("租赁合同", "ZL"),
            Map.entry("融资租赁合同", "RZ"),
            Map.entry("保理合同", "BL"),
            Map.entry("承揽合同", "CL"),
            Map.entry("建设工程合同", "GC"),
            Map.entry("运输合同", "YS"),
            Map.entry("技术合同", "JS"),
            Map.entry("保管合同", "BG"),
            Map.entry("仓储合同", "CC"),
            Map.entry("委托合同", "WT"),
            Map.entry("物业服务合同", "WY"),
            Map.entry("行纪合同", "HJ"),
            Map.entry("中介合同", "ZJ"),
            Map.entry("合伙合同", "HH"),
            Map.entry("用工合同", "YG"),
            Map.entry("业务合同", "YW"),
            Map.entry("其他合同", "QT")
    );

    private ManifestCodeUtils() {
    }

    /** 生成模板编号（格式：TPL-合同类型编码-yyyyMMddHHmmss-随机3位数字） */
    public static String buildTemplateCode(String contractType) {
        String typeCode = CONTRACT_TYPE_CODE_MAP.getOrDefault(contractType, "QT");
        String now = new SimpleDateFormat("yyyyMMddHHmmss").format(new Date());
        int random = ThreadLocalRandom.current().nextInt(100, 1000);
        return "TPL-" + typeCode + "-" + now + "-" + random;
    }
}
