package com.dora.util;

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

/**
 * 订单工具类
 */
public class OrderUtil {
    
    private static final String ORDER_PREFIX = "ORD";
    private static final DateTimeFormatter DATETIME_FORMATTER = DateTimeFormatter.ofPattern("yyyyMMddHHmmss");
    private static final Random RANDOM = new Random();
    
    /**
     * 生成唯一订单号
     * 格式：ORD + yyyyMMddHHmmss + 4位随机数
     * 例如：ORD202412011030001234
     * 
     * @return 订单号
     */
    public static String generateOrderNo() {
        String timestamp = LocalDateTime.now().format(DATETIME_FORMATTER);
        String randomSuffix = String.format("%04d", RANDOM.nextInt(10000));
        return ORDER_PREFIX + timestamp + randomSuffix;
    }
    
    /**
     * 验证订单号格式
     * 
     * @param orderNo 订单号
     * @return 是否为有效格式
     */
    public static boolean isValidOrderNo(String orderNo) {
        if (orderNo == null || orderNo.trim().isEmpty()) {
            return false;
        }
        
        // 检查前缀
        if (!orderNo.startsWith(ORDER_PREFIX)) {
            return false;
        }
        
        // 检查长度：ORD(3) + yyyyMMddHHmmss(14) + 随机数(4) = 21
        if (orderNo.length() != 21) {
            return false;
        }
        
        // 检查后18位是否为数字
        String numberPart = orderNo.substring(3);
        try {
            Long.parseLong(numberPart);
            return true;
        } catch (NumberFormatException e) {
            return false;
        }
    }
    
    /**
     * 从订单号中提取时间戳
     * 
     * @param orderNo 订单号
     * @return 时间戳字符串，格式：yyyyMMddHHmmss
     */
    public static String extractTimestampFromOrderNo(String orderNo) {
        if (!isValidOrderNo(orderNo)) {
            return null;
        }
        return orderNo.substring(3, 17); // 提取时间戳部分
    }
}
