using CMSMicroservice.Domain.Enums;

namespace CMSMicroservice.Domain.Entities.DiscountShop;

/// <summary>
/// سفارش از فروشگاه تخفیفی
/// در این سفارش، پرداخت به صورت ترکیبی است:
/// - بخشی از DiscountBalance کاربر کسر می‌شود (محدود به MaxDiscountPercent)
/// - مابقی از درگاه پرداخت پرداخت می‌شود
/// </summary>
public class DiscountOrder : BaseAuditableEntity
{
    /// <summary>
    /// شناسه کاربر
    /// </summary>
    public long UserId { get; set; }
    
    /// <summary>
    /// مبلغ کل سفارش (قیمت تمام محصولات)
    /// </summary>
    public long TotalAmount { get; set; }
    
    /// <summary>
    /// مبلغ کسر شده از DiscountBalance
    /// این مبلغ محدود به MaxDiscountPercent هر محصول است
    /// </summary>
    public long DiscountBalanceUsed { get; set; }
    
    /// <summary>
    /// مبلغ پرداخت شده از درگاه (IPG)
    /// PayableAmount = TotalAmount - DiscountBalanceUsed
    /// </summary>
    public long GatewayAmountPaid { get; set; }
    
    /// <summary>
    /// مالیات بر ارزش افزوده (VAT) - 9%
    /// محاسبه روی TotalAmount
    /// </summary>
    public long VatAmount { get; set; }
    
    /// <summary>
    /// وضعیت پرداخت
    /// </summary>
    public PaymentStatus PaymentStatus { get; set; }
    
    /// <summary>
    /// تاریخ پرداخت
    /// </summary>
    public DateTime? PaymentDate { get; set; }
    
    /// <summary>
    /// شناسه تراکنش (Transaction از درگاه پرداخت)
    /// </summary>
    public long? TransactionId { get; set; }
    
    /// <summary>
    /// شناسه آدرس تحویل
    /// </summary>
    public long UserAddressId { get; set; }
    
    /// <summary>
    /// وضعیت ارسال
    /// </summary>
    public DeliveryStatus DeliveryStatus { get; set; }
    
    /// <summary>
    /// کد رهگیری مرسوله
    /// </summary>
    public string? TrackingCode { get; set; }
    
    /// <summary>
    /// توضیحات وضعیت ارسال
    /// </summary>
    public string? DeliveryDescription { get; set; }
    
    // ============= Navigation Properties =============
    
    /// <summary>
    /// کاربر
    /// </summary>
    public virtual User User { get; set; }
    
    /// <summary>
    /// تراکنش پرداخت از درگاه
    /// </summary>
    public virtual Transaction? Transaction { get; set; }
    
    /// <summary>
    /// آدرس تحویل
    /// </summary>
    public virtual UserAddress UserAddress { get; set; }
    
    /// <summary>
    /// جزئیات سفارش (محصولات)
    /// </summary>
    public virtual ICollection<DiscountOrderDetail> OrderDetails { get; set; }
}
