namespace TakeoutSaaS.TenantApi.Contracts.Member;

/// <summary>
/// 会员列表筛选请求。
/// </summary>
public class MemberListFilterRequest
{
    /// <summary>
    /// 门店 ID（可选，未传表示当前商户全部可见门店）。
    /// </summary>
    public string? StoreId { get; set; }

    /// <summary>
    /// 关键词（姓名/手机号）。
    /// </summary>
    public string? Keyword { get; set; }

    /// <summary>
    /// 等级标识。
    /// </summary>
    public string? TierId { get; set; }
}

/// <summary>
/// 会员列表分页请求。
/// </summary>
public sealed class MemberListRequest : MemberListFilterRequest
{
    /// <summary>
    /// 页码。
    /// </summary>
    public int Page { get; set; } = 1;

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

/// <summary>
/// 会员详情请求。
/// </summary>
public sealed class MemberDetailRequest
{
    /// <summary>
    /// 门店 ID（可选，未传表示当前商户全部可见门店）。
    /// </summary>
    public string? StoreId { get; set; }

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

/// <summary>
/// 保存会员标签请求。
/// </summary>
public sealed class SaveMemberTagsRequest
{
    /// <summary>
    /// 门店 ID（可选，未传表示当前商户全部可见门店）。
    /// </summary>
    public string? StoreId { get; set; }

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

    /// <summary>
    /// 标签集合。
    /// </summary>
    public List<string> Tags { get; set; } = [];
}

/// <summary>
/// 会员列表行响应。
/// </summary>
public sealed class MemberListItemResponse
{
    /// <summary>
    /// 会员标识。
    /// </summary>
    public string MemberId { get; set; } = string.Empty;

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

    /// <summary>
    /// 头像文案。
    /// </summary>
    public string AvatarText { get; set; } = string.Empty;

    /// <summary>
    /// 头像颜色。
    /// </summary>
    public string AvatarColor { get; set; } = string.Empty;

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

    /// <summary>
    /// 会员等级标识。
    /// </summary>
    public string? TierId { get; set; }

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

    /// <summary>
    /// 等级主题色。
    /// </summary>
    public string TierColorHex { get; set; } = string.Empty;

    /// <summary>
    /// 累计消费。
    /// </summary>
    public decimal TotalAmount { get; set; }

    /// <summary>
    /// 消费次数。
    /// </summary>
    public int OrderCount { get; set; }

    /// <summary>
    /// 最近消费时间（yyyy-MM-dd）。
    /// </summary>
    public string LastOrderAt { get; set; } = string.Empty;

    /// <summary>
    /// 储值余额。
    /// </summary>
    public decimal StoredBalance { get; set; }

    /// <summary>
    /// 积分余额。
    /// </summary>
    public int PointsBalance { get; set; }

    /// <summary>
    /// 是否沉睡会员。
    /// </summary>
    public bool IsDormant { get; set; }
}

/// <summary>
/// 会员列表响应。
/// </summary>
public sealed class MemberListResultResponse
{
    /// <summary>
    /// 列表项。
    /// </summary>
    public List<MemberListItemResponse> Items { get; set; } = [];

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

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

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

/// <summary>
/// 会员列表统计响应。
/// </summary>
public sealed class MemberListStatsResponse
{
    /// <summary>
    /// 会员总数。
    /// </summary>
    public int TotalMembers { get; set; }

    /// <summary>
    /// 本月新增会员数。
    /// </summary>
    public int MonthlyNewMembers { get; set; }

    /// <summary>
    /// 活跃会员数。
    /// </summary>
    public int ActiveMembers { get; set; }

    /// <summary>
    /// 沉睡会员数。
    /// </summary>
    public int DormantMembers { get; set; }
}

/// <summary>
/// 会员最近订单响应。
/// </summary>
public sealed class MemberRecentOrderResponse
{
    /// <summary>
    /// 下单日期（yyyy-MM-dd）。
    /// </summary>
    public string OrderedAt { get; set; } = string.Empty;

    /// <summary>
    /// 订单号。
    /// </summary>
    public string OrderNo { get; set; } = string.Empty;

    /// <summary>
    /// 订单金额。
    /// </summary>
    public decimal Amount { get; set; }

    /// <summary>
    /// 订单状态文案。
    /// </summary>
    public string StatusText { get; set; } = string.Empty;
}

/// <summary>
/// 会员详情响应。
/// </summary>
public sealed class MemberDetailResponse
{
    /// <summary>
    /// 会员标识。
    /// </summary>
    public string MemberId { get; set; } = string.Empty;

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

    /// <summary>
    /// 头像文案。
    /// </summary>
    public string AvatarText { get; set; } = string.Empty;

    /// <summary>
    /// 头像颜色。
    /// </summary>
    public string AvatarColor { get; set; } = string.Empty;

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

    /// <summary>
    /// 注册时间（yyyy-MM-dd）。
    /// </summary>
    public string JoinedAt { get; set; } = string.Empty;

    /// <summary>
    /// 会员等级标识。
    /// </summary>
    public string? TierId { get; set; }

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

    /// <summary>
    /// 等级主题色。
    /// </summary>
    public string TierColorHex { get; set; } = string.Empty;

    /// <summary>
    /// 累计消费。
    /// </summary>
    public decimal TotalAmount { get; set; }

    /// <summary>
    /// 消费次数。
    /// </summary>
    public int OrderCount { get; set; }

    /// <summary>
    /// 平均客单价。
    /// </summary>
    public decimal AverageAmount { get; set; }

    /// <summary>
    /// 储值余额。
    /// </summary>
    public decimal StoredBalance { get; set; }

    /// <summary>
    /// 储值实充余额。
    /// </summary>
    public decimal StoredRechargeBalance { get; set; }

    /// <summary>
    /// 储值赠金余额。
    /// </summary>
    public decimal StoredGiftBalance { get; set; }

    /// <summary>
    /// 积分余额。
    /// </summary>
    public int PointsBalance { get; set; }

    /// <summary>
    /// 会员标签。
    /// </summary>
    public List<string> Tags { get; set; } = [];

    /// <summary>
    /// 最近订单。
    /// </summary>
    public List<MemberRecentOrderResponse> RecentOrders { get; set; } = [];
}

/// <summary>
/// 会员导出响应。
/// </summary>
public sealed class MemberExportResponse
{
    /// <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; }
}
