namespace TakeoutSaaS.TenantApi.Contracts.Member;

/// <summary>
/// 储值卡方案列表请求。
/// </summary>
public sealed class StoredCardPlanListRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;
}

/// <summary>
/// 保存储值卡方案请求。
/// </summary>
public sealed class SaveStoredCardPlanRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

    /// <summary>
    /// 方案 ID（编辑时传）。
    /// </summary>
    public string? PlanId { get; set; }

    /// <summary>
    /// 充值金额。
    /// </summary>
    public decimal RechargeAmount { get; set; }

    /// <summary>
    /// 赠送金额。
    /// </summary>
    public decimal GiftAmount { get; set; }

    /// <summary>
    /// 排序值。
    /// </summary>
    public int SortOrder { get; set; } = 100;

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

/// <summary>
/// 修改方案状态请求。
/// </summary>
public sealed class ChangeStoredCardPlanStatusRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

    /// <summary>
    /// 方案 ID。
    /// </summary>
    public string PlanId { get; set; } = string.Empty;

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

/// <summary>
/// 删除方案请求。
/// </summary>
public sealed class DeleteStoredCardPlanRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

    /// <summary>
    /// 方案 ID。
    /// </summary>
    public string PlanId { get; set; } = string.Empty;
}

/// <summary>
/// 充值记录分页查询请求。
/// </summary>
public sealed class StoredCardRechargeRecordListRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

    /// <summary>
    /// 开始日期（yyyy-MM-dd）。
    /// </summary>
    public string? StartDate { get; set; }

    /// <summary>
    /// 结束日期（yyyy-MM-dd）。
    /// </summary>
    public string? EndDate { get; set; }

    /// <summary>
    /// 关键字（会员名称/手机号/单号）。
    /// </summary>
    public string? Keyword { get; set; }

    /// <summary>
    /// 页码。
    /// </summary>
    public int Page { get; set; } = 1;

    /// <summary>
    /// 每页条数。
    /// </summary>
    public int PageSize { get; set; } = 8;
}

/// <summary>
/// 充值记录导出请求。
/// </summary>
public sealed class ExportStoredCardRechargeRecordRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

    /// <summary>
    /// 开始日期（yyyy-MM-dd）。
    /// </summary>
    public string? StartDate { get; set; }

    /// <summary>
    /// 结束日期（yyyy-MM-dd）。
    /// </summary>
    public string? EndDate { get; set; }

    /// <summary>
    /// 关键字（会员名称/手机号/单号）。
    /// </summary>
    public string? Keyword { get; set; }
}

/// <summary>
/// 写入充值记录请求。
/// </summary>
public sealed class WriteStoredCardRechargeRecordRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

    /// <summary>
    /// 会员 ID（必填）。
    /// </summary>
    public string MemberId { get; set; } = string.Empty;

    /// <summary>
    /// 方案 ID（可空）。
    /// </summary>
    public string? PlanId { get; set; }

    /// <summary>
    /// 充值金额。
    /// </summary>
    public decimal RechargeAmount { get; set; }

    /// <summary>
    /// 赠送金额。
    /// </summary>
    public decimal GiftAmount { get; set; }

    /// <summary>
    /// 支付方式（wechat/alipay/cash/card/balance）。
    /// </summary>
    public string PaymentMethod { get; set; } = "wechat";

    /// <summary>
    /// 充值时间（可空，默认当前时间）。
    /// </summary>
    public DateTime? RechargedAt { get; set; }

    /// <summary>
    /// 备注。
    /// </summary>
    public string? Remark { get; set; }
}

/// <summary>
/// 储值卡方案统计响应。
/// </summary>
public sealed class StoredCardPlanStatsResponse
{
    /// <summary>
    /// 储值总额。
    /// </summary>
    public decimal TotalRechargeAmount { get; set; }

    /// <summary>
    /// 赠金总额。
    /// </summary>
    public decimal TotalGiftAmount { get; set; }

    /// <summary>
    /// 本月充值。
    /// </summary>
    public decimal CurrentMonthRechargeAmount { get; set; }

    /// <summary>
    /// 储值用户。
    /// </summary>
    public int RechargeMemberCount { get; set; }
}

/// <summary>
/// 储值卡方案响应。
/// </summary>
public sealed class StoredCardPlanResponse
{
    /// <summary>
    /// 方案 ID。
    /// </summary>
    public string PlanId { get; set; } = string.Empty;

    /// <summary>
    /// 充值金额。
    /// </summary>
    public decimal RechargeAmount { get; set; }

    /// <summary>
    /// 赠送金额。
    /// </summary>
    public decimal GiftAmount { get; set; }

    /// <summary>
    /// 到账金额。
    /// </summary>
    public decimal ArrivedAmount { get; set; }

    /// <summary>
    /// 排序。
    /// </summary>
    public int SortOrder { get; set; }

    /// <summary>
    /// 状态。
    /// </summary>
    public string Status { get; set; } = "enabled";

    /// <summary>
    /// 累计充值次数。
    /// </summary>
    public int RechargeCount { get; set; }

    /// <summary>
    /// 累计充值金额。
    /// </summary>
    public decimal TotalRechargeAmount { get; set; }
}

/// <summary>
/// 储值卡方案列表响应。
/// </summary>
public sealed class StoredCardPlanListResultResponse
{
    /// <summary>
    /// 方案列表。
    /// </summary>
    public List<StoredCardPlanResponse> Items { get; set; } = [];

    /// <summary>
    /// 页面统计。
    /// </summary>
    public StoredCardPlanStatsResponse Stats { get; set; } = new();
}

/// <summary>
/// 充值记录响应。
/// </summary>
public sealed class StoredCardRechargeRecordResponse
{
    /// <summary>
    /// 记录 ID。
    /// </summary>
    public string RecordId { get; set; } = string.Empty;

    /// <summary>
    /// 充值单号。
    /// </summary>
    public string RecordNo { get; set; } = string.Empty;

    /// <summary>
    /// 会员 ID。
    /// </summary>
    public string MemberId { get; set; } = string.Empty;

    /// <summary>
    /// 会员名称。
    /// </summary>
    public string MemberName { get; set; } = string.Empty;

    /// <summary>
    /// 手机号（脱敏）。
    /// </summary>
    public string MemberMobileMasked { get; set; } = string.Empty;

    /// <summary>
    /// 充值金额。
    /// </summary>
    public decimal RechargeAmount { get; set; }

    /// <summary>
    /// 赠送金额。
    /// </summary>
    public decimal GiftAmount { get; set; }

    /// <summary>
    /// 到账金额。
    /// </summary>
    public decimal ArrivedAmount { get; set; }

    /// <summary>
    /// 支付方式编码。
    /// </summary>
    public string PaymentMethod { get; set; } = "unknown";

    /// <summary>
    /// 支付方式文案。
    /// </summary>
    public string PaymentMethodText { get; set; } = "未知";

    /// <summary>
    /// 充值时间（本地显示字符串）。
    /// </summary>
    public string RechargedAt { get; set; } = string.Empty;

    /// <summary>
    /// 方案 ID。
    /// </summary>
    public string? PlanId { get; set; }

    /// <summary>
    /// 备注。
    /// </summary>
    public string? Remark { get; set; }
}

/// <summary>
/// 充值记录分页结果响应。
/// </summary>
public sealed class StoredCardRechargeRecordListResultResponse
{
    /// <summary>
    /// 列表项。
    /// </summary>
    public List<StoredCardRechargeRecordResponse> Items { get; set; } = [];

    /// <summary>
    /// 页码。
    /// </summary>
    public int Page { get; set; }

    /// <summary>
    /// 每页条数。
    /// </summary>
    public int PageSize { get; set; }

    /// <summary>
    /// 总条数。
    /// </summary>
    public int TotalCount { get; set; }
}

/// <summary>
/// 充值记录导出响应。
/// </summary>
public sealed class StoredCardRechargeRecordExportResponse
{
    /// <summary>
    /// 文件名。
    /// </summary>
    public string FileName { get; set; } = string.Empty;

    /// <summary>
    /// Base64 内容。
    /// </summary>
    public string FileContentBase64 { get; set; } = string.Empty;

    /// <summary>
    /// 导出总数。
    /// </summary>
    public int TotalCount { get; set; }
}
