package com.ycwl.basic.pricing.dto.resp;

import com.ycwl.basic.pricing.enums.ProductType;
import lombok.Data;

import java.math.BigDecimal;
import java.util.Date;
import java.util.List;

/**
 * 券码详情响应
 */
@Data
public class VoucherDetailResp {
    
    /**
     * 券码
     */
    private String voucherCode;
    
    /**
     * 批次信息
     */
    private BatchInfo batchInfo;
    
    /**
     * 使用信息
     */
    private UsageInfo usageInfo;
    
    /**
     * 用户信息
     */
    private UserInfo userInfo;
    
    /**
     * 状态信息
     */
    private StatusInfo statusInfo;
    
    @Data
    public static class BatchInfo {
        /**
         * 批次ID
         */
        private Long batchId;
        
        /**
         * 批次名称
         */
        private String batchName;
        
        /**
         * 优惠类型 (0: 赠品兑换, 1: 金额抵扣, 2: 百分比折扣)
         */
        private Integer discountType;
        
        /**
         * 优惠值
         */
        private BigDecimal discountValue;
        
        /**
         * 适用商品类型
         */
        private List<ProductType> applicableProducts;
    }
    
    @Data
    public static class UsageInfo {
        /**
         * 最大使用次数
         */
        private Integer maxUseCount;
        
        /**
         * 当前已使用次数
         */
        private Integer currentUseCount;
        
        /**
         * 剩余使用次数
         */
        private Integer remainingUseCount;
        
        /**
         * 每个用户最大使用次数
         */
        private Integer maxUsePerUser;
        
        /**
         * 使用间隔小时数
         */
        private Integer useIntervalHours;
        
        /**
         * 是否还能使用
         */
        private Boolean canUseMore;
    }
    
    @Data
    public static class UserInfo {
        /**
         * 用户ID
         */
        private Long userId;
        
        /**
         * 该用户已使用此券码的次数
         */
        private Integer userUsageCount;
        
        /**
         * 最后使用时间
         */
        private Date lastUsedTime;
        
        /**
         * 下次可用时间
         */
        private Date nextAvailableTime;
    }
    
    @Data
    public static class StatusInfo {
        /**
         * 状态码
         */
        private Integer status;
        
        /**
         * 状态名称
         */
        private String statusName;
        
        /**
         * 领取时间
         */
        private Date claimedTime;
    }
}