package com.haha.entity.vo;

import lombok.AllArgsConstructor;
import lombok.Builder;
import lombok.Data;
import lombok.NoArgsConstructor;

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

/**
 * 统一活动视图对象
 * 用于统一返回营销活动（type 1-3）和邀请活动（type 4）的数据
 * 隐藏底层表结构差异，提供统一的展示格式
 */
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
public class UnifiedActivityVO {

    // ===== 通用字段 (所有类型共用) =====

    /**
     * 活动ID
     */
    private Long id;

    /**
     * 活动名称
     */
    private String activityName;

    /**
     * 活动类型：1-首单立减 2-优惠折扣 3-商品满减 4-邀请有礼
     */
    private Integer activityType;

    /**
     * 类型名称（中文显示）
     */
    private String activityTypeName;

    /**
     * 活动描述
     */
    private String activityDesc;

    /**
     * 开始时间
     */
    private LocalDateTime startTime;

    /**
     * 结束时间
     */
    private LocalDateTime endTime;

    /**
     * 状态：0-草稿/未开始 1-已发布/进行中 2-已暂停 3-已结束/已停用
     */
    private Integer status;

    /**
     * 状态名称（中文显示）
     */
    private String statusName;

    // ===== 营销活动特有字段 (type 1,2,3) =====

    /**
     * 优惠值（立减金额、折扣率、满减门槛等）
     */
    private BigDecimal discountValue;

    /**
     * 最低消费金额
     */
    private BigDecimal minAmount;

    /**
     * 最大优惠金额上限
     */
    private BigDecimal maxDiscount;

    /**
     * 总预算金额
     */
    private BigDecimal totalBudget;

    /**
     * 已使用预算
     */
    private BigDecimal usedBudget;

    // ===== 邀请活动特有字段 (type 4) =====

    /**
     * 邀请人奖励优惠券模板ID
     */
    private Long inviterCouponTemplateId;

    /**
     * 邀请人奖励优惠券名称（关联查询）
     */
    private String inviterCouponName;

    /**
     * 被邀请人奖励优惠券模板ID
     */
    private Long inviteeCouponTemplateId;

    /**
     * 被邀请人奖励优惠券名称（关联查询）
     */
    private String inviteeCouponName;

    /**
     * 每人每日最大邀请数
     */
    private Integer dailyLimit;

    /**
     * 每人活动期间最大邀请总数
     */
    private Integer totalLimit;

    /**
     * 是否要求完成首单：0-否 1-是
     */
    private Integer requireFirstOrder;

    /**
     * 首单最低金额要求
     */
    private BigDecimal minOrderAmount;

    /**
     * 总邀请次数
     */
    private Integer totalInviteCount;

    /**
     * 有效邀请数
     */
    private Integer validInviteCount;

    /**
     * 奖励发放总数
     */
    private Integer rewardCount;

    // ===== 统计信息 =====

    /**
     * 创建时间
     */
    private LocalDateTime createTime;

    /**
     * 创建人姓名
     */
    private String creatorName;

    /**
     * 适用范围：0-全平台 1-指定设备/门店
     */
    private Integer applyScope;

    /**
     * 适用范围名称
     */
    private String applyScopeLabel;
}
