using CMSMicroservice.Domain.Common;
using CMSMicroservice.Domain.Enums;

namespace CMSMicroservice.Domain.Entities;

/// <summary>
/// پکیج — هر پکیج قیمت، ویژگی‌ها و تنظیمات مستقل دارد
/// </summary>
public class Package : BaseAuditableEntity
    // , IHasHistory<History.PackageHistory>
{
    // === فیلدهای فعلی (حفظ) ===
    
    /// <summary>عنوان پکیج</summary>
    public string Title { get; set; }
    
    /// <summary>توضیحات</summary>
    public string Description { get; set; }
    
    /// <summary>آدرس تصویر</summary>
    public string ImagePath { get; set; }
    
    /// <summary>قیمت پکیج (تومان)</summary>
    public long Price { get; set; }

    // === فیلدهای جدید v3 ===
    
    /// <summary>ترتیب نمایش</summary>
    public int SortOrder { get; set; }
    
    /// <summary>فعال/غیرفعال</summary>
    public bool IsActive { get; set; } = true;
    
    /// <summary>پکیج پایه؟ (فقط یکی true)</summary>
    public bool IsBasePackage { get; set; }
    
    /// <summary>پشتیبانی از خرید دایا</summary>
    public bool SupportsDayaPurchase { get; set; }
    
    /// <summary>پشتیبانی از پرداخت مستقیم</summary>
    public bool SupportsDirectPurchase { get; set; } = true;

    // === محاسبات مالی ===
    
    /// <summary>سهم Commission Pool (ریال) — معمولاً Price × 0.45</summary>
    public long ActivationFee { get; set; }
    
    /// <summary>ضریب شارژ DiscountBalance — فعلاً ×2 برای همه</summary>
    public decimal DiscountMultiplier { get; set; } = 2.0m;
    
    /// <summary>ضریب کیف‌پول جادویی — واریز × این مقدار = اعتبار</summary>
    public decimal MagicWalletMultiplier { get; set; } = 2.5m;

    // === تنظیمات پورسانت ===
    
    /// <summary>سقف تعادل هر پا (نقره‌ای=۳۰، پایه=۳۰۰)</summary>
    public int MaxBalancesPerLeg { get; set; } = 300;
    
    /// <summary>عمق شبکه برای محاسبه کمیسیون</summary>
    public int MaxNetworkLevel { get; set; } = 15;

    // === تنظیمات کیف‌پول جادویی ===
    
    /// <summary>سقف شارژ هر دور جادویی (ریال)</summary>
    public long MagicWalletMaxDeposit { get; set; } = 1_000_000_000;
    
    /// <summary>سقف اعتبار هر دور جادویی (ریال)</summary>
    public long MagicWalletMaxCredit { get; set; } = 2_500_000_000;

    // === Navigation Properties ===
    
    /// <summary>فیچرهای این پکیج</summary>
    public virtual ICollection<PackageFeature>? PackageFeatures { get; set; }
    
    /// <summary>سفارشات مرتبط</summary>
    public virtual ICollection<UserOrder> UserOrders { get; set; }
    
    /// <summary>خریدهای پکیج</summary>
    public virtual ICollection<UserPackagePurchase>? Purchases { get; set; }

    /// <summary>تاریخچه تغییرات پکیج (Q27)</summary>
    public virtual ICollection<History.PackageHistory>? PackageHistories { get; set; }

    /// <summary>
    /// ساخت snapshot تاریخچه — Q27 auto-tracking
    /// </summary>
    // public History.PackageHistory CreateHistorySnapshot(string action, string? performedBy)
    // {
    //     return new History.PackageHistory
    //     {
    //         PackageId = Id,
    //         NewPrice = Price,
    //         NewActivationFee = ActivationFee,
    //         NewMagicMultiplier = MagicWalletMultiplier,
    //         NewMagicMaxDeposit = MagicWalletMaxDeposit,
    //         NewMaxBalancesPerLeg = MaxBalancesPerLeg,
    //         NewIsActive = IsActive,
    //         Action = Enum.TryParse<PackageAction>(action, out var a) ? a : PackageAction.Updated,
    //         PerformedBy = performedBy
    //     };
    // }
}
