package com.yd.csf.service.utils;

import java.util.concurrent.ThreadLocalRandom;

/**
 * 业务编号生成工具类
 * <p>格式：出账年月 + 转介人内部编号后6位(无则补0) + 6位随机数字</p>
 */
public class BusinessNoUtils {

    /**
     * 生成业务编号
     *
     * @param billingYearMonth 出账年月，如 "202604"
     * @param referrerInnerNo  转介人内部编号，可为 null 或空字符串
     * @return 完整的业务编号字符串
     */
    public static String generate(String billingYearMonth, String referrerInnerNo) {
        String referrerPart = formatReferrerInnerNo(referrerInnerNo);
        String serialPart = generateRandomSerial();
        return billingYearMonth + referrerPart + serialPart;
    }

    // 格式化转介人内部编号：取后6位，不足左补0，无则全0
    private static String formatReferrerInnerNo(String referrerInnerNo) {
        if (referrerInnerNo == null || referrerInnerNo.trim().isEmpty()) {
            return "000000";
        }
        String no = referrerInnerNo.trim();
        if (no.length() > 6) {
            return no.substring(no.length() - 6);
        }
        return String.format("%6s", no).replace(' ', '0');
    }

    // 生成6位随机数字（000000~999999）
    private static String generateRandomSerial() {
        int random = ThreadLocalRandom.current().nextInt(1000000);
        return String.format("%06d", random);
    }
}