namespace TakeoutSaaS.Application.App.Finance.Settlement.Dto;

/// <summary>
/// 到账查询汇总行 DTO。
/// </summary>
public sealed class FinanceSettlementListItemDto
{
    /// <summary>
    /// 到账日期（UTC 日期）。
    /// </summary>
    public DateTime ArrivedDate { get; set; }

    /// <summary>
    /// 渠道编码（wechat/alipay）。
    /// </summary>
    public string Channel { get; set; } = string.Empty;

    /// <summary>
    /// 渠道文案。
    /// </summary>
    public string ChannelText { get; set; } = string.Empty;

    /// <summary>
    /// 交易笔数。
    /// </summary>
    public int TransactionCount { get; set; }

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

/// <summary>
/// 到账查询分页结果 DTO。
/// </summary>
public sealed class FinanceSettlementListResultDto
{
    /// <summary>
    /// 列表项。
    /// </summary>
    public List<FinanceSettlementListItemDto> 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>
/// 到账明细行 DTO。
/// </summary>
public sealed class FinanceSettlementDetailItemDto
{
    /// <summary>
    /// 订单号。
    /// </summary>
    public string OrderNo { get; set; } = string.Empty;

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

    /// <summary>
    /// 支付时间（UTC）。
    /// </summary>
    public DateTime PaidAt { get; set; }
}

/// <summary>
/// 到账明细结果 DTO。
/// </summary>
public sealed class FinanceSettlementDetailResultDto
{
    /// <summary>
    /// 明细列表。
    /// </summary>
    public List<FinanceSettlementDetailItemDto> Items { get; set; } = [];
}

/// <summary>
/// 到账统计 DTO。
/// </summary>
public sealed class FinanceSettlementStatsDto
{
    /// <summary>
    /// 今日到账金额。
    /// </summary>
    public decimal TodayArrivedAmount { get; set; }

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

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

    /// <summary>
    /// 本月交易笔数。
    /// </summary>
    public int CurrentMonthTransactionCount { get; set; }
}

/// <summary>
/// 到账账户信息 DTO。
/// </summary>
public sealed class FinanceSettlementAccountDto
{
    /// <summary>
    /// 银行名称。
    /// </summary>
    public string BankName { get; set; } = string.Empty;

    /// <summary>
    /// 开户名。
    /// </summary>
    public string BankAccountName { get; set; } = string.Empty;

    /// <summary>
    /// 脱敏银行账号。
    /// </summary>
    public string BankAccountNoMasked { get; set; } = string.Empty;

    /// <summary>
    /// 脱敏微信商户号。
    /// </summary>
    public string WechatMerchantNoMasked { get; set; } = string.Empty;

    /// <summary>
    /// 脱敏支付宝 PID。
    /// </summary>
    public string AlipayPidMasked { get; set; } = string.Empty;

    /// <summary>
    /// 结算周期文案。
    /// </summary>
    public string SettlementPeriodText { get; set; } = string.Empty;
}

/// <summary>
/// 到账导出 DTO。
/// </summary>
public sealed class FinanceSettlementExportDto
{
    /// <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; }
}
