package com.chinaweal.aiccs.utils;

import java.time.LocalDateTime;
import java.time.format.DateTimeFormatter;
import java.util.Random;

/**
 * @Description:
 * @Author: TiAmo-cc
 * @Email: 1049976610@qq.com
 * @Date: 2026/1/5 14:15
 */
public class DocumentNoGenerator {

    private static final Random RANDOM = new Random();

    /**
     * 生成随机文书号（格式：前缀 + 年月日时分秒 + 6位随机数）
     * @param prefix 前缀标识，如："GS"表示告知书，"YW"表示业务号
     * @return 生成的文书号
     */
    public static String generate(String prefix) {
        // 获取当前时间，格式：yyyyMMddHHmmss
        String timeStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));

        // 生成6位随机数字
        String randomStr = String.format("%06d", RANDOM.nextInt(1000000));

        // 组合成文书号：前缀 + 时间 + 随机数
        return prefix + timeStr + randomStr;
    }

    /**
     * 生成告知书编号
     * @return 告知书编号，格式：GS + 年月日时分秒 + 6位随机数
     */
    public static String generateNoticeNo() {
        return generate("GS");
    }

    /**
     * 生成业务号
     * @return 业务号，格式：YW + 年月日时分秒 + 6位随机数
     */
    public static String generateBizNo() {
        return generate("YW");
    }

    /**
     * 生成带机构编码的文书号（格式：机构编码 + 前缀 + 年月日时分秒 + 6位随机数）
     * @param orgCode 机构编码
     * @param prefix 前缀标识
     * @return 生成的文书号
     */
    public static String generateWithOrg(String orgCode, String prefix) {
        String timeStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmmss"));
        String randomStr = String.format("%06d", RANDOM.nextInt(1000000));
        return orgCode + prefix + timeStr + randomStr;
    }

    /**
     * 生成流水号样式的文书号（格式：前缀 + 年月日 + 6位流水号）
     * @param prefix 前缀
     * @param sequence 流水号（需要从数据库获取当前最大值）
     * @return 生成的文书号
     */
    public static String generateSerialNo(String prefix, int sequence) {
        String dateStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
        String sequenceStr = String.format("%06d", sequence);
        return prefix + dateStr + sequenceStr;
    }

    /**
     * 生成纯随机文书号（格式：前缀 + 年月日 + 6位随机数）
     * @param prefix 前缀
     * @return 生成的文书号
     */
    public static String generateDateRandom(String prefix) {
        String dateStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMdd"));
        String randomStr = String.format("%06d", RANDOM.nextInt(1000000));
        return prefix + dateStr + randomStr;
    }

    /**
     * 生成带序号的文书号（格式：前缀 + 年月日 + 时分 + 6位随机数）
     * @param prefix 前缀
     * @return 生成的文书号
     */
    public static String generateMinuteRandom(String prefix) {
        String timeStr = LocalDateTime.now().format(DateTimeFormatter.ofPattern("yyyyMMddHHmm"));
        String randomStr = String.format("%06d", RANDOM.nextInt(1000000));
        return prefix + timeStr + randomStr;
    }

    /**
     * 生成UUID样式的文书号
     * @param prefix 前缀
     * @return 生成的文书号（前缀 + 6位随机数 + UUID部分）
     */
    public static String generateUUIDNo(String prefix) {
        String randomStr = String.format("%06d", RANDOM.nextInt(1000000));
        String uuid = java.util.UUID.randomUUID().toString().replace("-", "").substring(0, 10).toUpperCase();
        return prefix + randomStr + uuid;
    }
}
