using TakeoutSaaS.Domain.Stores.Enums;

namespace TakeoutSaaS.Application.App.Stores.Dto;

/// <summary>
/// 费用计算结果。
/// </summary>
public sealed record StoreFeeCalculationResultDto
{
    /// <summary>
    /// 商品金额。
    /// </summary>
    public decimal OrderAmount { get; init; }

    /// <summary>
    /// 起送费。
    /// </summary>
    public decimal MinimumOrderAmount { get; init; }

    /// <summary>
    /// 是否达到起送费。
    /// </summary>
    public bool MeetsMinimum { get; init; }

    /// <summary>
    /// 距离起送差额。
    /// </summary>
    public decimal? Shortfall { get; init; }

    /// <summary>
    /// 配送费。
    /// </summary>
    public decimal DeliveryFee { get; init; }

    /// <summary>
    /// 打包费。
    /// </summary>
    public decimal PackagingFee { get; init; }

    /// <summary>
    /// 打包费模式。
    /// </summary>
    public PackagingFeeMode PackagingFeeMode { get; init; }

    /// <summary>
    /// 订单打包费规则。
    /// </summary>
    public OrderPackagingFeeMode OrderPackagingFeeMode { get; init; }

    /// <summary>
    /// 打包费拆分明细。
    /// </summary>
    public IReadOnlyList<StoreFeeCalculationBreakdownDto>? PackagingFeeBreakdown { get; init; }

    /// <summary>
    /// 费用合计。
    /// </summary>
    public decimal TotalFee { get; init; }

    /// <summary>
    /// 总金额。
    /// </summary>
    public decimal TotalAmount { get; init; }

    /// <summary>
    /// 文案提示。
    /// </summary>
    public string? Message { get; init; }
}
