namespace TakeoutSaaS.Application.App.Coupons.PunchCard.Dto;

/// <summary>
/// 次卡详情。
/// </summary>
public sealed class PunchCardDetailDto
{
    /// <summary>
    /// 次卡 ID。
    /// </summary>
    public long Id { get; init; }

    /// <summary>
    /// 门店 ID。
    /// </summary>
    public long StoreId { get; init; }

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

    /// <summary>
    /// 封面图。
    /// </summary>
    public string? CoverImageUrl { get; init; }

    /// <summary>
    /// 售价。
    /// </summary>
    public decimal SalePrice { get; init; }

    /// <summary>
    /// 原价。
    /// </summary>
    public decimal? OriginalPrice { get; init; }

    /// <summary>
    /// 总次数。
    /// </summary>
    public int TotalTimes { get; init; }

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

    /// <summary>
    /// 固定天数。
    /// </summary>
    public int? ValidityDays { get; init; }

    /// <summary>
    /// 固定开始日期（UTC）。
    /// </summary>
    public DateTime? ValidFrom { get; init; }

    /// <summary>
    /// 固定结束日期（UTC）。
    /// </summary>
    public DateTime? ValidTo { get; init; }

    /// <summary>
    /// 适用范围。
    /// </summary>
    public PunchCardScopeDto Scope { get; init; } = new();

    /// <summary>
    /// 使用模式（free/cap）。
    /// </summary>
    public string UsageMode { get; init; } = "free";

    /// <summary>
    /// 金额上限。
    /// </summary>
    public decimal? UsageCapAmount { get; init; }

    /// <summary>
    /// 每日限用。
    /// </summary>
    public int? DailyLimit { get; init; }

    /// <summary>
    /// 每单限用。
    /// </summary>
    public int? PerOrderLimit { get; init; }

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

    /// <summary>
    /// 是否允许转赠。
    /// </summary>
    public bool AllowTransfer { get; init; }

    /// <summary>
    /// 过期策略（invalidate/refund）。
    /// </summary>
    public string ExpireStrategy { get; init; } = "invalidate";

    /// <summary>
    /// 描述。
    /// </summary>
    public string? Description { get; init; }

    /// <summary>
    /// 通知渠道（in_app/sms）。
    /// </summary>
    public IReadOnlyList<string> NotifyChannels { get; init; } = [];

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

    /// <summary>
    /// 已售数量。
    /// </summary>
    public int SoldCount { get; init; }

    /// <summary>
    /// 使用中数量。
    /// </summary>
    public int ActiveCount { get; init; }

    /// <summary>
    /// 累计收入。
    /// </summary>
    public decimal RevenueAmount { get; init; }

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