using TakeoutSaaS.Domain.Finance.Enums;

namespace TakeoutSaaS.Domain.Finance.Models;

/// <summary>
/// 经营报表 KPI 快照项。
/// </summary>
public sealed class FinanceBusinessReportKpiSnapshot
{
    /// <summary>
    /// 指标键。
    /// </summary>
    public string Key { get; set; } = string.Empty;

    /// <summary>
    /// 指标名称。
    /// </summary>
    public string Label { get; set; } = string.Empty;

    /// <summary>
    /// 指标值。
    /// </summary>
    public decimal Value { get; set; }

    /// <summary>
    /// 同比变化率（百分数，如 3.5 表示 +3.5%）。
    /// </summary>
    public decimal YoyChangeRate { get; set; }

    /// <summary>
    /// 环比变化率（百分数，如 2.1 表示 +2.1%）。
    /// </summary>
    public decimal MomChangeRate { get; set; }
}

/// <summary>
/// 经营报表明细行快照。
/// </summary>
public sealed class FinanceBusinessReportBreakdownSnapshot
{
    /// <summary>
    /// 明细键。
    /// </summary>
    public string Key { get; set; } = string.Empty;

    /// <summary>
    /// 明细名称。
    /// </summary>
    public string Label { get; set; } = string.Empty;

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

    /// <summary>
    /// 占比（0-1）。
    /// </summary>
    public decimal Ratio { get; set; }
}

/// <summary>
/// 经营报表列表行快照。
/// </summary>
public sealed class FinanceBusinessReportListItemSnapshot
{
    /// <summary>
    /// 报表 ID。
    /// </summary>
    public long ReportId { get; set; }

    /// <summary>
    /// 周期类型。
    /// </summary>
    public FinanceBusinessReportPeriodType PeriodType { get; set; }

    /// <summary>
    /// 周期开始时间（UTC，含）。
    /// </summary>
    public DateTime PeriodStartAt { get; set; }

    /// <summary>
    /// 周期结束时间（UTC，不含）。
    /// </summary>
    public DateTime PeriodEndAt { get; set; }

    /// <summary>
    /// 状态。
    /// </summary>
    public FinanceBusinessReportStatus Status { get; set; }

    /// <summary>
    /// 营业额。
    /// </summary>
    public decimal RevenueAmount { get; set; }

    /// <summary>
    /// 订单数。
    /// </summary>
    public int OrderCount { get; set; }

    /// <summary>
    /// 客单价。
    /// </summary>
    public decimal AverageOrderValue { get; set; }

    /// <summary>
    /// 退款率（0-1）。
    /// </summary>
    public decimal RefundRate { get; set; }

    /// <summary>
    /// 成本总额。
    /// </summary>
    public decimal CostTotalAmount { get; set; }

    /// <summary>
    /// 净利润。
    /// </summary>
    public decimal NetProfitAmount { get; set; }

    /// <summary>
    /// 利润率（0-1）。
    /// </summary>
    public decimal ProfitRate { get; set; }
}

/// <summary>
/// 经营报表分页快照。
/// </summary>
public sealed class FinanceBusinessReportPageSnapshot
{
    /// <summary>
    /// 列表。
    /// </summary>
    public List<FinanceBusinessReportListItemSnapshot> Items { get; set; } = [];

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

/// <summary>
/// 经营报表详情快照。
/// </summary>
public sealed class FinanceBusinessReportDetailSnapshot
{
    /// <summary>
    /// 报表 ID。
    /// </summary>
    public long ReportId { get; set; }

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

    /// <summary>
    /// 周期类型。
    /// </summary>
    public FinanceBusinessReportPeriodType PeriodType { get; set; }

    /// <summary>
    /// 周期开始时间（UTC，含）。
    /// </summary>
    public DateTime PeriodStartAt { get; set; }

    /// <summary>
    /// 周期结束时间（UTC，不含）。
    /// </summary>
    public DateTime PeriodEndAt { get; set; }

    /// <summary>
    /// 状态。
    /// </summary>
    public FinanceBusinessReportStatus Status { get; set; }

    /// <summary>
    /// 营业额。
    /// </summary>
    public decimal RevenueAmount { get; set; }

    /// <summary>
    /// 订单数。
    /// </summary>
    public int OrderCount { get; set; }

    /// <summary>
    /// 客单价。
    /// </summary>
    public decimal AverageOrderValue { get; set; }

    /// <summary>
    /// 退款率（0-1）。
    /// </summary>
    public decimal RefundRate { get; set; }

    /// <summary>
    /// 成本总额。
    /// </summary>
    public decimal CostTotalAmount { get; set; }

    /// <summary>
    /// 净利润。
    /// </summary>
    public decimal NetProfitAmount { get; set; }

    /// <summary>
    /// 利润率（0-1）。
    /// </summary>
    public decimal ProfitRate { get; set; }

    /// <summary>
    /// 关键指标快照列表。
    /// </summary>
    public List<FinanceBusinessReportKpiSnapshot> Kpis { get; set; } = [];

    /// <summary>
    /// 收入明细（按渠道）。
    /// </summary>
    public List<FinanceBusinessReportBreakdownSnapshot> IncomeBreakdowns { get; set; } = [];

    /// <summary>
    /// 成本明细（按类别）。
    /// </summary>
    public List<FinanceBusinessReportBreakdownSnapshot> CostBreakdowns { get; set; } = [];
}

/// <summary>
/// 待处理报表任务快照。
/// </summary>
public sealed class FinanceBusinessReportPendingSnapshot
{
    /// <summary>
    /// 快照 ID。
    /// </summary>
    public long SnapshotId { get; set; }

    /// <summary>
    /// 租户 ID。
    /// </summary>
    public long TenantId { get; set; }
}

