using MediatR;
using TakeoutSaaS.Application.App.Coupons.NewCustomer.Dto;

namespace TakeoutSaaS.Application.App.Coupons.NewCustomer.Commands;

/// <summary>
/// 保存新客有礼配置。
/// </summary>
public sealed class SaveNewCustomerSettingsCommand : IRequest<NewCustomerSettingsDto>
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public long StoreId { get; init; }

    /// <summary>
    /// 是否开启新客礼包。
    /// </summary>
    public bool GiftEnabled { get; init; }

    /// <summary>
    /// 礼包类型（coupon/direct）。
    /// </summary>
    public string GiftType { get; init; } = "coupon";

    /// <summary>
    /// 首单直减金额。
    /// </summary>
    public decimal? DirectReduceAmount { get; init; }

    /// <summary>
    /// 首单直减门槛金额。
    /// </summary>
    public decimal? DirectMinimumSpend { get; init; }

    /// <summary>
    /// 是否开启邀请分享。
    /// </summary>
    public bool InviteEnabled { get; init; }

    /// <summary>
    /// 分享渠道。
    /// </summary>
    public IReadOnlyCollection<string> ShareChannels { get; init; } = [];

    /// <summary>
    /// 新客礼包券。
    /// </summary>
    public IReadOnlyCollection<NewCustomerSaveCouponRuleInputDto> WelcomeCoupons { get; init; } = [];

    /// <summary>
    /// 邀请人奖励券。
    /// </summary>
    public IReadOnlyCollection<NewCustomerSaveCouponRuleInputDto> InviterCoupons { get; init; } = [];

    /// <summary>
    /// 被邀请人奖励券。
    /// </summary>
    public IReadOnlyCollection<NewCustomerSaveCouponRuleInputDto> InviteeCoupons { get; init; } = [];
}
