namespace TakeoutSaaS.Application.App.Coupons.Dto;

/// <summary>
/// 优惠券模板详情 DTO。
/// </summary>
public sealed class CouponTemplateDetailDto
{
    /// <summary>
    /// 模板 ID。
    /// </summary>
    public long Id { get; init; }

    /// <summary>
    /// 券名称。
    /// </summary>
    public string Name { get; init; } = string.Empty;

    /// <summary>
    /// 券类型（amount_off/discount/free_delivery）。
    /// </summary>
    public string CouponType { get; init; } = "amount_off";

    /// <summary>
    /// 面值或折扣值。
    /// </summary>
    public decimal Value { get; init; }

    /// <summary>
    /// 使用门槛。
    /// </summary>
    public decimal? MinimumSpend { get; init; }

    /// <summary>
    /// 发放总量。
    /// </summary>
    public int TotalQuantity { get; init; }

    /// <summary>
    /// 已领取数量。
    /// </summary>
    public int ClaimedQuantity { get; init; }

    /// <summary>
    /// 每人限领。
    /// </summary>
    public int? PerUserLimit { get; init; }

    /// <summary>
    /// 有效期类型（fixed/days）。
    /// </summary>
    public string ValidityType { get; init; } = "fixed";

    /// <summary>
    /// 固定有效期开始。
    /// </summary>
    public DateTime? ValidFrom { get; init; }

    /// <summary>
    /// 固定有效期结束。
    /// </summary>
    public DateTime? ValidTo { get; init; }

    /// <summary>
    /// 领取后有效天数。
    /// </summary>
    public int? RelativeValidDays { get; init; }

    /// <summary>
    /// 渠道列表（delivery/pickup/dine_in）。
    /// </summary>
    public IReadOnlyList<string> Channels { get; init; } = [];

    /// <summary>
    /// 门店范围模式（all/stores）。
    /// </summary>
    public string StoreScopeMode { get; init; } = "stores";

    /// <summary>
    /// 门店范围 ID 列表。
    /// </summary>
    public IReadOnlyList<long> StoreIds { get; init; } = [];

    /// <summary>
    /// 编辑状态（enabled/disabled）。
    /// </summary>
    public string Status { get; init; } = "enabled";

    /// <summary>
    /// 更新时间。
    /// </summary>
    public DateTime UpdatedAt { get; init; }
}
