package com.gxwebsoft.common.core.utils;

import lombok.Data;

/**
 * 二维码解密结果类
 * 包含解密后的数据和业务类型信息
 *
 * @author WebSoft
 * @since 2025-08-18
 */
@Data
public class QrCodeDecryptResult {
    
    /**
     * 解密后的原始数据
     */
    private String originalData;
    
    /**
     * 业务类型（如：order、user、coupon、ticket等）
     */
    private String businessType;
    
    /**
     * 二维码类型（encrypted 或 business_encrypted）
     */
    private String qrType;
    
    /**
     * 二维码ID（仅业务模式有）
     */
    private String qrId;
    
    /**
     * 过期时间戳（仅业务模式有）
     */
    private Long expireTime;
    
    /**
     * 是否已过期
     */
    private Boolean expired;

    public QrCodeDecryptResult() {}

    public QrCodeDecryptResult(String originalData, String businessType, String qrType) {
        this.originalData = originalData;
        this.businessType = businessType;
        this.qrType = qrType;
        this.expired = false;
    }

    /**
     * 创建自包含模式的解密结果
     */
    public static QrCodeDecryptResult createEncryptedResult(String originalData, String businessType) {
        return new QrCodeDecryptResult(originalData, businessType, "encrypted");
    }

    /**
     * 创建业务模式的解密结果
     */
    public static QrCodeDecryptResult createBusinessResult(String originalData, String businessType, 
                                                          String qrId, Long expireTime) {
        QrCodeDecryptResult result = new QrCodeDecryptResult(originalData, businessType, "business_encrypted");
        result.setQrId(qrId);
        result.setExpireTime(expireTime);
        result.setExpired(expireTime != null && System.currentTimeMillis() > expireTime);
        return result;
    }

    /**
     * 检查是否有业务类型
     */
    public boolean hasBusinessType() {
        return businessType != null && !businessType.trim().isEmpty();
    }

    /**
     * 检查是否为业务模式
     */
    public boolean isBusinessMode() {
        return "business_encrypted".equals(qrType);
    }

    /**
     * 检查是否为自包含模式
     */
    public boolean isEncryptedMode() {
        return "encrypted".equals(qrType);
    }
}
