package com.jeesharp.business.modules.coupon.vo;

import com.jeesharp.framework.pojo.vo.BaseInfoVO;
import io.swagger.v3.oas.annotations.media.Schema;
import lombok.Data;
import lombok.EqualsAndHashCode;

import java.math.BigDecimal;
import java.time.LocalDateTime;

/**
 * 优惠券模板详情 VO。
 *
 * @author jeesharp
 * @since 2026-05-07
 */
@Data
@EqualsAndHashCode(callSuper = true)
@Schema(description = "优惠券模板详情")
public class CouponTemplateInfoVO extends BaseInfoVO {

    @Schema(description = "主键")
    private String id;

    @Schema(description = "优惠券编码")
    private String couponCode;

    @Schema(description = "优惠券名称")
    private String couponName;

    @Schema(description = "优惠券类型")
    private Integer couponType;

    @Schema(description = "优惠券类型名称")
    private String couponTypeName;

    @Schema(description = "优惠券图片")
    private String couponImage;

    @Schema(description = "优惠方式")
    private Integer discountType;

    @Schema(description = "优惠方式名称")
    private String discountTypeName;

    @Schema(description = "优惠值")
    private BigDecimal discountValue;

    @Schema(description = "最低消费金额")
    private BigDecimal minConsumeAmount;

    @Schema(description = "最大优惠金额")
    private BigDecimal maxDiscountAmount;

    @Schema(description = "使用范围")
    private Integer useScope;

    @Schema(description = "使用范围名称")
    private String useScopeName;

    @Schema(description = "使用场景编号")
    private String sceneCode;

    @Schema(description = "使用场景名称")
    private String sceneName;

    @Schema(description = "范围ID JSON")
    private String scopeIds;

    @Schema(description = "排除范围 JSON")
    private String excludeScopeIds;

    @Schema(description = "发行总量")
    private Integer totalCount;

    @Schema(description = "已发放")
    private Integer issuedCount;

    @Schema(description = "已使用")
    private Integer usedCount;

    @Schema(description = "每人限领")
    private Integer perMemberLimit;

    @Schema(description = "领取方式")
    private Integer getType;

    @Schema(description = "领取方式名称")
    private String getTypeName;

    @Schema(description = "兑换积分")
    private Integer exchangePoints;

    @Schema(description = "有效期类型")
    private Integer validityType;

    @Schema(description = "有效期类型名称")
    private String validityTypeName;

    @Schema(description = "固定有效期开始")
    private LocalDateTime validStartDate;

    @Schema(description = "固定有效期结束")
    private LocalDateTime validEndDate;

    @Schema(description = "领后有效天数")
    private Integer validDays;

    @Schema(description = "可领开始")
    private LocalDateTime getStartDate;

    @Schema(description = "可领结束")
    private LocalDateTime getEndDate;

    @Schema(description = "可用平台 JSON")
    private String usePlatforms;

    @Schema(description = "可用等级 JSON")
    private String memberLevels;

    @Schema(description = "是否可叠加")
    private Integer canOverlay;

    @Schema(description = "状态")
    private Integer status;

    @Schema(description = "状态名称")
    private String statusName;

    @Schema(description = "使用说明")
    private String description;

    @Schema(description = "领券太阳码图片 URL")
    private String claimQrcodeUrl;

    @Schema(description = "创建时间")
    private LocalDateTime createDate;
}
