package com.czg.market.entity;

import com.czg.market.dto.ShopCouponDTO;
import com.mybatisflex.annotation.Column;
import com.mybatisflex.annotation.Id;
import com.mybatisflex.annotation.Table;
import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

import java.io.Serial;
import java.io.Serializable;
import java.time.LocalDateTime;

/**
 * 分享奖励基础配置 实体类。
 *
 * @author ww
 * @since 2026-01-27
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@Table("mk_share_base")
public class MkShareBase implements Serializable {

    @Serial
    private static final long serialVersionUID = 1L;

    /**
     * 店铺id
     */
    @Id
    private Long shopId;

    /**
     * 功能开启状态 1=开启 0=关闭
     */
    private Integer isEnabled;

    /**
     * 可获得奖励的分享页面，用逗号分隔，
     * 店铺首页	index
     * 我的	dine
     * 点餐页	eat
     * 点餐页	eat-detail
     * 套餐推广-列表	pp-list
     * 套餐推广-详情	pp-detail
     * 商品拼团-列表	gb-list
     * 商品拼团-详情	gb-detail
     * 全民股东	dis
     */
    private String rewardSharePages;

    /**
     * 分享人奖励的优惠券ID，关联优惠券表
     */
    private Long sharerCouponId;
    /**
     * 分享人奖励的优惠券信息
     */
    @Column(ignore = true)
    private ShopCouponDTO sharerCoupon;
    /**
     * 分享人奖励的优惠券名称
     */
    @Column(ignore = true)
    private String sharerCouponName;

    /**
     * 分享人单次获得优惠券数量
     */
    private Integer sharerCouponNum;

    /**
     * 可获得奖励次数 1=仅1次 2=每次分享成功
     */
    private Integer rewardTimesType;

    /**
     * 被分享人奖励的优惠券ID，关联优惠券表（可选）
     */
    private Long sharedUserCouponId;
    /**
     * 被分享人奖励的优惠券名称
     */
    @Column(ignore = true)
    private String sharedUserCouponName;

    /**
     * 被分享人单次获得优惠券数量（可选）
     */
    private Integer sharedUserCouponNum;

    /**
     * 被分享人弹窗开关 1=开启 0=关闭
     */
    private Integer isSharedUserPopup;

    /**
     * 创建时间
     */
    @Column(onInsertValue = "now()")
    private LocalDateTime createTime;

    /**
     * 更新时间
     */
    @Column(onInsertValue = "now()", onUpdateValue = "now()")
    private LocalDateTime updateTime;

}
