package com.yc.ship.module.marketing.dal.dataobject.coupon;

import com.baomidou.mybatisplus.annotation.KeySequence;
import com.baomidou.mybatisplus.annotation.TableField;
import com.baomidou.mybatisplus.annotation.TableId;
import com.baomidou.mybatisplus.annotation.TableName;
import com.yc.ship.framework.tenant.core.db.TenantBaseDO;
import lombok.*;
import lombok.experimental.Accessors;

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

/**
 * 优惠券 DO
 *
 * @author lfy
 */
@TableName("coupon")
@KeySequence("coupon_seq") // 用于 Oracle、PostgreSQL、Kingbase、DB2、H2 数据库的主键自增。如果是 MySQL 等数据库，可不写。
@Data
@EqualsAndHashCode(callSuper = true)
@ToString(callSuper = true)
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Accessors(chain = true)
public class CouponDO extends TenantBaseDO {

    /**
     * ID
     */
    @TableId
    private Long id;
    /**
     * 优惠券名称
     */
    private String name;

    /**
     * 优惠券二维码
     */
    private String qrCode;
    /**
     * 优惠券类型
     *
     * 枚举 {@link com.zshl.travelhub.ops.marketing.enums.coupon.CouponTypeEnum 对应的类}
     */
    private Integer type;
    /**
     * 使用渠道
     *
     * 枚举 {@link com.zshl.travelhub.ops.marketing.enums.coupon.CouponUseChannelEnum 对应的类}
     */
    private Integer useChannel;
    /**
     * 使用后领下一张
     *
     * 枚举 {@link  com.zshl.travelhub.ops.marketing.enums.common.YesOrNoEnum 对应的类}
     */
    private Integer useAfter;
    /**
     * 审核状态
     *
     * 枚举 {@link com.zshl.travelhub.ops.marketing.enums.coupon.CouponAuditStateEnum 对应的类}
     */
    private Integer auditState;
    /**
     * 可派发状态
     *
     * 枚举 {@link EnableStateEnum 对应的类}
     */
    private Integer state;
    /**
     * 使用说明
     */
    private String description;

    /**
     * 派发开始时间
     */
    private LocalDateTime deliverStart;
    /**
     * 派发结束时间
     */
    private LocalDateTime deliverEnd;
    /**
     * 派发用户群体类型
     */
    private Integer deliverUserGroupType;
    /**
     * 派发用户群体
     */
    private String deliverUserGroup;
    /**
     * 派发总量
     */
    private Integer number;
    /**
     * 单用户最大派发量
     */
    private Integer singleUserMax;
    /**
     * 单日最大派发量
     */
    private Integer singleDayMax;

    /**
     * 门槛费（满减的满金额）
     */
    private BigDecimal basic;
    /**
     * 金额，折扣
     */
    private BigDecimal quota;
    /**
     * 最大减免
     */
    private BigDecimal maximum;
    /**
     * 是否多券同用
     */
    private Integer multiple;
    /**
     * 有效类型（1、固定时间。2、相对时间）
     */
    private Integer effectiveType;
    /**
     * 有效开始时间
     */
    private LocalDateTime effectiveStart;
    /**
     * 有效结束时间
     */
    private LocalDateTime effectiveEnd;
    /**
     * 动态有效时长（分钟数）
     */
    private Integer effectiveTime;
    /**
     * 有效期终止日期
     */
    private LocalDateTime maxEffectiveTime;

    /**
     * 领取时间
     */
    @TableField(exist = false)
    private LocalDateTime getTime;

    /**
     * 关联产品类型
     */
    @TableField(exist = false)
    private Integer relationType;
    /**
     * 关联产品分组ID或产品ID
     */
    @TableField(exist = false)
    private Long relationId;

    /**
     * 关联子产品ID
     */
    @TableField(exist = false)
    private Long relationChildId;

    /**
     * 关联产品规格
     */
    @TableField(exist = false)
    private String relationSkuId;

    /**
     * 优惠金额
     */
    @TableField(exist = false)
    private BigDecimal amount;

    @TableField(exist = false)
    private Long couponCodeId;

}