package com.haha.entity.dto;

import lombok.Data;

import jakarta.validation.constraints.NotNull;
import com.fasterxml.jackson.annotation.JsonFormat;
import java.math.BigDecimal;
import java.time.LocalDateTime;
import java.util.List;

/**
 * 统一活动更新DTO
 * 支持所有活动类型：1-首单立减 2-优惠折扣 3-商品满减 4-邀请有礼
 * 与 CreateDTO 类似，但 id 字段必填，其他字段可选（用于部分更新）
 */
@Data
public class UnifiedActivityUpdateDTO {

    // ===== 必填字段 =====

    /**
     * 活动ID（必填）
     */
    @NotNull(message = "活动ID不能为空")
    private Long id;

    // ===== 通用字段 (所有类型共用) - 可选更新 =====

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

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

    /**
     * 开始时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime startTime;

    /**
     * 结束时间
     */
    @JsonFormat(pattern = "yyyy-MM-dd HH:mm:ss")
    private LocalDateTime endTime;

    // ===== 适用范围字段 - 可选更新 =====

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

    /**
     * 设备范围
     */
    private Integer deviceScope;

    /**
     * 商品范围
     */
    private Integer productScope;

    // ===== 预算控制 - 可选更新 =====

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

    // ===== 优惠字段 (type 1,2,3 使用) - 可选更新 =====

    /**
     * 优惠值
     */
    private BigDecimal discountValue;

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

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

    // ===== 邀请特有字段 (type 4 使用) - 可选更新 =====

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

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

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

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

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

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

    /**
     * 邀请码前缀
     */
    private String inviteCodePrefix;

    // ===== 关联ID列表 - 可选更新 =====

    /**
     * 指定门店ID列表
     */
    private List<Long> shopIds;

    /**
     * 指定设备ID列表
     */
    private List<String> deviceIds;

    /**
     * 指定商品ID列表
     */
    private List<Long> productIds;
}
