using System.Text.Json.Serialization;
using TakeoutSaaS.Domain.Tenants.Enums;
using TakeoutSaaS.Shared.Abstractions.Serialization;

namespace TakeoutSaaS.Application.App.Tenants.Dto;

/// <summary>
/// 租户套餐 DTO。
/// </summary>
public sealed class TenantPackageDto
{
    /// <summary>
    /// 套餐 ID。
    /// </summary>
    [JsonConverter(typeof(SnowflakeIdJsonConverter))]
    public long Id { get; init; }

    /// <summary>
    /// 套餐名称。
    /// </summary>
    public string Name { get; init; } = string.Empty;

    /// <summary>
    /// 描述。
    /// </summary>
    public string? Description { get; init; }

    /// <summary>
    /// 套餐类型。
    /// </summary>
    public TenantPackageType PackageType { get; init; }

    /// <summary>
    /// 月付价格。
    /// </summary>
    public decimal? MonthlyPrice { get; init; }

    /// <summary>
    /// 年付价格。
    /// </summary>
    public decimal? YearlyPrice { get; init; }

    /// <summary>
    /// 最大门店数。
    /// </summary>
    public int? MaxStoreCount { get; init; }

    /// <summary>
    /// 最大账号数。
    /// </summary>
    public int? MaxAccountCount { get; init; }

    /// <summary>
    /// 存储上限（GB）。
    /// </summary>
    public int? MaxStorageGb { get; init; }

    /// <summary>
    /// 短信额度。
    /// </summary>
    public int? MaxSmsCredits { get; init; }

    /// <summary>
    /// 配送单上限。
    /// </summary>
    public int? MaxDeliveryOrders { get; init; }

    /// <summary>
    /// 权益明细 JSON。
    /// </summary>
    public string? FeaturePoliciesJson { get; init; }

    /// <summary>
    /// 是否可售。
    /// </summary>
    public bool IsActive { get; init; }

    /// <summary>
    /// 展示排序，数值越小越靠前。
    /// </summary>
    public int SortOrder { get; init; }
}
