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

/// <summary>
/// 经营报表列表行 DTO。
/// </summary>
public sealed class FinanceBusinessReportListItemDto
{
    /// <summary>
    /// 报表 ID。
    /// </summary>
    public string ReportId { get; set; } = string.Empty;

    /// <summary>
    /// 日期文案。
    /// </summary>
    public string DateText { get; set; } = string.Empty;

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

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

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

    /// <summary>
    /// 退款率（百分数）。
    /// </summary>
    public decimal RefundRatePercent { get; set; }

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

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

    /// <summary>
    /// 利润率（百分数）。
    /// </summary>
    public decimal ProfitRatePercent { get; set; }

    /// <summary>
    /// 状态编码。
    /// </summary>
    public string Status { get; set; } = string.Empty;

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

    /// <summary>
    /// 是否可下载。
    /// </summary>
    public bool CanDownload { get; set; }
}

/// <summary>
/// 经营报表列表结果 DTO。
/// </summary>
public sealed class FinanceBusinessReportListResultDto
{
    /// <summary>
    /// 列表项。
    /// </summary>
    public List<FinanceBusinessReportListItemDto> 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>
/// 经营报表 KPI DTO。
/// </summary>
public sealed class FinanceBusinessReportKpiDto
{
    /// <summary>
    /// 指标键。
    /// </summary>
    public string Key { get; set; } = string.Empty;

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

    /// <summary>
    /// 指标值文本。
    /// </summary>
    public string ValueText { get; set; } = string.Empty;

    /// <summary>
    /// 同比变化率（百分数）。
    /// </summary>
    public decimal YoyChangeRate { get; set; }

    /// <summary>
    /// 环比变化率（百分数）。
    /// </summary>
    public decimal MomChangeRate { get; set; }
}

/// <summary>
/// 经营报表明细行 DTO。
/// </summary>
public sealed class FinanceBusinessReportBreakdownItemDto
{
    /// <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>
    /// 占比（百分数）。
    /// </summary>
    public decimal RatioPercent { get; set; }
}

/// <summary>
/// 经营报表详情 DTO。
/// </summary>
public sealed class FinanceBusinessReportDetailDto
{
    /// <summary>
    /// 报表 ID。
    /// </summary>
    public string ReportId { get; set; } = string.Empty;

    /// <summary>
    /// 标题。
    /// </summary>
    public string Title { get; set; } = string.Empty;

    /// <summary>
    /// 周期类型编码。
    /// </summary>
    public string PeriodType { get; set; } = string.Empty;

    /// <summary>
    /// 状态编码。
    /// </summary>
    public string Status { get; set; } = string.Empty;

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

    /// <summary>
    /// 关键指标。
    /// </summary>
    public List<FinanceBusinessReportKpiDto> Kpis { get; set; } = [];

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

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

/// <summary>
/// 经营报表导出 DTO。
/// </summary>
public sealed class FinanceBusinessReportExportDto
{
    /// <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; }
}

