using TakeoutSaaS.Domain.Finance.Enums;
using TakeoutSaaS.Shared.Abstractions.Entities;

namespace TakeoutSaaS.Domain.Finance.Entities;

/// <summary>
/// 经营报表快照实体。
/// </summary>
public sealed class FinanceBusinessReportSnapshot : MultiTenantEntityBase
{
    /// <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; } = FinanceBusinessReportStatus.Queued;

    /// <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>
    /// KPI 比较快照 JSON（同比/环比）。
    /// </summary>
    public string KpiComparisonJson { get; set; } = "[]";

    /// <summary>
    /// 收入明细快照 JSON（按渠道）。
    /// </summary>
    public string IncomeBreakdownJson { get; set; } = "[]";

    /// <summary>
    /// 成本明细快照 JSON（按类别）。
    /// </summary>
    public string CostBreakdownJson { get; set; } = "[]";

    /// <summary>
    /// 生成开始时间（UTC）。
    /// </summary>
    public DateTime? StartedAt { get; set; }

    /// <summary>
    /// 生成完成时间（UTC）。
    /// </summary>
    public DateTime? FinishedAt { get; set; }

    /// <summary>
    /// 最近一次失败信息。
    /// </summary>
    public string? LastError { get; set; }

    /// <summary>
    /// 重试次数。
    /// </summary>
    public int RetryCount { get; set; }

    /// <summary>
    /// 调度任务 ID。
    /// </summary>
    public string? HangfireJobId { get; set; }
}

