package com.cyksj.model.views;

import com.cyksj.model.entity.Coupon;
import com.ejlchina.searcher.bean.DbField;
import com.ejlchina.searcher.bean.DbIgnore;
import com.ejlchina.searcher.bean.SearchBean;
import com.fasterxml.jackson.annotation.JsonIgnore;
import lombok.Getter;
import lombok.Setter;

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

/*
 *项目名: netflix
 *文件名: CouponActiveView
 *创建者: JavaZou
 *创建时间:2022/11/18 10:00
 */
@Getter
@Setter
@SearchBean(tables = "coupon_active ca left join coupon c on c.id = ca.coupon_id left join coupon_classification cc on cc.id = c.classification_id",
		where = "ca.deleted is true")
public class CouponActiveView {
	@DbField("ca.id")
	private Long id;

	/**
	 * 优惠券id
	 */
	@DbField("c.id")
	private Long couponId;

	/**
	 * 优惠券名称
	 */
	@DbField("c.name")
	private String name;

	@DbField("cc.id")
	private Long classificationId;

	@DbField("cc.name")
	private String couponClassificationName;

	/**
	 * 优惠券平台类型
	 */
	@DbField("c.goods_type")
	private Coupon.GoodsType goodsType;

	/**
	 * 优惠券类型
	 */
	@DbField("c.type")
	private Coupon.Type type;

	/**
	 * 可用满减卷金额条件
	 */
	@DbField("c.reduce_condition")
	private BigDecimal reduceCondition;

	/**
	 * 抵扣金额
	 */
	@DbField("c.reduce_money")
	private BigDecimal reduceMoney;

	/**
	 * 折扣
	 */
	@DbField("c.discount")
	private BigDecimal discount;

	/**
	 * 领取人范围
	 */
	@DbField("c.scope")
	private Coupon.Scope scope;

	/**
	 * 平台规格集合
	 */
	@DbField("c.goods_sku_ids")
	private String goodsSkuIds;

	@DbIgnore
	private String goodsSkuStr;

	@DbIgnore
	private List<GoodsDonSkuView> skuViewList;

	/**
	 * 是否是有效时间
	 */
	@DbField("c.is_valid_time")
	private Boolean isValidTime;

	/**
	 * 起始有效时间
	 */
	@DbField("c.valid_start_time")
	private Date validStartTime;

	/**
	 * 截止有效时间
	 */
	@DbField("c.valid_end_time")
	private Date validEndTime;

	/**
	 * 领取有效天数
	 */
	@DbField("c.valid_days")
	private Integer validDays;

	@DbField("c.valid_hours")
	private Integer validHours;

	/**
	 * 使用范围
	 */
	@DbField("c.use_scope")
	private Coupon.UseScope useScope;

	/**
	 * 发放数量
	 */
	@DbField("ca.num")
	private Integer num;

	/**
	 * 状态(默认启用)
	 */
	@DbField("ca.status")
	private Boolean status;

	/**
	 * 有效状态(默认有效)
	 */
	@DbField("ca.expiry_status")
	private Boolean expiryStatus;

	/**
	 * 剩余数量
	 */
	@DbField("ca.remain_num")
	private Integer remainNum;

	/**
	 * 领取人数
	 */
	@DbIgnore
	private Integer receiptNum;

	/**
	 * 使用人数
	 */
	@DbIgnore
	private Integer usedNum;

	@DbIgnore
	private CouponStatus couponStatus;

	@DbIgnore
	@JsonIgnore
	private Integer order;

	@DbField("ca.created_time")
	private Date createdTime;

	@Getter
	public enum CouponStatus {
		collecting("collecting", "待领取"),
		received("received", "已领取"),
		over("over", "已领完"),
		stop("stop", "停止领取"),
		;
		private String status;
		private String desc;

		CouponStatus(String status, String desc) {
			this.status = status;
			this.desc = desc;
		}
	}
}
