namespace TakeoutSaaS.TenantApi.Contracts.Finance;

/// <summary>
/// 经营报表列表请求。
/// </summary>
public sealed class FinanceBusinessReportListRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

    /// <summary>
    /// 周期类型（daily/weekly/monthly）。
    /// </summary>
    public string? PeriodType { get; set; } = "daily";

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

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

/// <summary>
/// 经营报表详情请求。
/// </summary>
public sealed class FinanceBusinessReportDetailRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

    /// <summary>
    /// 报表 ID。
    /// </summary>
    public string ReportId { get; set; } = string.Empty;
}

/// <summary>
/// 经营报表批量导出请求。
/// </summary>
public sealed class FinanceBusinessReportBatchExportRequest
{
    /// <summary>
    /// 门店 ID。
    /// </summary>
    public string StoreId { get; set; } = string.Empty;

    /// <summary>
    /// 周期类型（daily/weekly/monthly）。
    /// </summary>
    public string? PeriodType { get; set; } = "daily";

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

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

/// <summary>
/// 经营报表列表行响应。
/// </summary>
public sealed class FinanceBusinessReportListItemResponse
{
    /// <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>
/// 经营报表列表响应。
/// </summary>
public sealed class FinanceBusinessReportListResultResponse
{
    /// <summary>
    /// 列表。
    /// </summary>
    public List<FinanceBusinessReportListItemResponse> 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 响应项。
/// </summary>
public sealed class FinanceBusinessReportKpiResponse
{
    /// <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>
/// 明细行响应项。
/// </summary>
public sealed class FinanceBusinessReportBreakdownItemResponse
{
    /// <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>
/// 经营报表详情响应。
/// </summary>
public sealed class FinanceBusinessReportDetailResponse
{
    /// <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>
    /// KPI 列表。
    /// </summary>
    public List<FinanceBusinessReportKpiResponse> Kpis { get; set; } = [];

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

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

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