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

namespace TakeoutSaaS.Domain.Tenants.Entities;

/// <summary>
/// 系统提供的租户套餐定义。
/// </summary>
public sealed class TenantPackage : AuditableEntityBase
{
    /// <summary>
    /// 套餐名称，展示给租户的简称。
    /// </summary>
    public string Name { get; set; } = string.Empty;

    /// <summary>
    /// 套餐描述，包含适用场景、权益等。
    /// </summary>
    public string? Description { get; set; }

    /// <summary>
    /// 套餐分类（试用、标准、旗舰等）。
    /// </summary>
    public TenantPackageType PackageType { get; set; } = TenantPackageType.Standard;

    /// <summary>
    /// 月付价格，单位：人民币元。
    /// </summary>
    public decimal? MonthlyPrice { get; set; }

    /// <summary>
    /// 年付价格，单位：人民币元。
    /// </summary>
    public decimal? YearlyPrice { get; set; }

    /// <summary>
    /// 允许的最大门店数。
    /// </summary>
    public int? MaxStoreCount { get; set; }

    /// <summary>
    /// 允许创建的最大账号数。
    /// </summary>
    public int? MaxAccountCount { get; set; }

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

    /// <summary>
    /// 每月短信额度上限。
    /// </summary>
    public int? MaxSmsCredits { get; set; }

    /// <summary>
    /// 每月可调用的配送单数量上限。
    /// </summary>
    public int? MaxDeliveryOrders { get; set; }

    /// <summary>
    /// 权益明细 JSON，记录自定义特性开关。
    /// </summary>
    public string? FeaturePoliciesJson { get; set; }

    /// <summary>
    /// 是否仍启用（系统控制）。
    /// </summary>
    public bool IsActive { get; set; } = true;

    /// <summary>
    /// 是否对外可见（展示页/套餐列表可见性）。
    /// </summary>
    public bool IsPublicVisible { get; set; } = true;

    /// <summary>
    /// 是否允许新租户购买/选择（仅影响新购，不影响已订阅租户）。
    /// </summary>
    public bool IsAllowNewTenantPurchase { get; set; } = true;

    /// <summary>
    /// 发布状态（草稿/已发布）。
    /// </summary>
    public TenantPackagePublishStatus PublishStatus { get; set; } = TenantPackagePublishStatus.Draft;

    /// <summary>
    /// 是否推荐展示（运营推荐标识）。
    /// </summary>
    public bool IsRecommended { get; set; }

    /// <summary>
    /// 套餐标签（用于展示与对比页，如：推荐/性价比/旗舰）。
    /// </summary>
    public string[] Tags { get; set; } = [];

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