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

/// <summary>
/// 交易流水列表行。
/// </summary>
public sealed class FinanceTransactionListItemDto
{
    /// <summary>
    /// 交易标识。
    /// </summary>
    public string TransactionId { get; set; } = string.Empty;

    /// <summary>
    /// 流水号。
    /// </summary>
    public string TransactionNo { get; set; } = string.Empty;

    /// <summary>
    /// 关联订单号。
    /// </summary>
    public string? OrderNo { get; set; }

    /// <summary>
    /// 交易类型编码。
    /// </summary>
    public string TransactionType { get; set; } = string.Empty;

    /// <summary>
    /// 交易类型文案。
    /// </summary>
    public string TransactionTypeText { get; set; } = string.Empty;

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

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

    /// <summary>
    /// 交易金额（带符号）。
    /// </summary>
    public decimal AmountSigned { get; set; }

    /// <summary>
    /// 交易时间。
    /// </summary>
    public DateTime OccurredAt { get; set; }

    /// <summary>
    /// 备注。
    /// </summary>
    public string Remark { get; set; } = string.Empty;

    /// <summary>
    /// 是否收入。
    /// </summary>
    public bool IsIncome { get; set; }
}

/// <summary>
/// 交易流水列表结果。
/// </summary>
public sealed class FinanceTransactionListResultDto
{
    /// <summary>
    /// 分页数据。
    /// </summary>
    public List<FinanceTransactionListItemDto> 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 decimal PageIncomeAmount { get; set; }

    /// <summary>
    /// 本页退款合计。
    /// </summary>
    public decimal PageRefundAmount { get; set; }
}

/// <summary>
/// 交易流水统计。
/// </summary>
public sealed class FinanceTransactionStatsDto
{
    /// <summary>
    /// 总收入。
    /// </summary>
    public decimal TotalIncome { get; set; }

    /// <summary>
    /// 总退款。
    /// </summary>
    public decimal TotalRefund { get; set; }

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

/// <summary>
/// 交易流水详情。
/// </summary>
public sealed class FinanceTransactionDetailDto
{
    /// <summary>
    /// 交易标识。
    /// </summary>
    public string TransactionId { get; set; } = string.Empty;

    /// <summary>
    /// 流水号。
    /// </summary>
    public string TransactionNo { get; set; } = string.Empty;

    /// <summary>
    /// 交易类型编码。
    /// </summary>
    public string TransactionType { get; set; } = string.Empty;

    /// <summary>
    /// 交易类型文案。
    /// </summary>
    public string TransactionTypeText { get; set; } = string.Empty;

    /// <summary>
    /// 门店标识。
    /// </summary>
    public long StoreId { get; set; }

    /// <summary>
    /// 关联订单号。
    /// </summary>
    public string? OrderNo { get; set; }

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

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

    /// <summary>
    /// 交易金额（带符号）。
    /// </summary>
    public decimal AmountSigned { get; set; }

    /// <summary>
    /// 交易时间。
    /// </summary>
    public DateTime OccurredAt { get; set; }

    /// <summary>
    /// 备注。
    /// </summary>
    public string Remark { get; set; } = string.Empty;

    /// <summary>
    /// 顾客姓名。
    /// </summary>
    public string CustomerName { get; set; } = string.Empty;

    /// <summary>
    /// 顾客手机号。
    /// </summary>
    public string CustomerPhone { get; set; } = string.Empty;

    /// <summary>
    /// 退款单号。
    /// </summary>
    public string? RefundNo { get; set; }

    /// <summary>
    /// 退款原因。
    /// </summary>
    public string? RefundReason { get; set; }

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

    /// <summary>
    /// 会员手机号脱敏值。
    /// </summary>
    public string? MemberMobileMasked { get; set; }

    /// <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? PointChangeAmount { get; set; }

    /// <summary>
    /// 积分变动后余额。
    /// </summary>
    public int? PointBalanceAfterChange { get; set; }
}

/// <summary>
/// 交易流水导出结果。
/// </summary>
public sealed class FinanceTransactionExportDto
{
    /// <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; }
}
