using CMSMicroservice.Domain.Enums;

namespace CMSMicroservice.Application.UserOrderCQ.Queries.GetUserOrder;
public class GetUserOrderResponseDto
{
    //شناسه 
    public long Id { get; set; }
    //قیمت 
    public long Amount { get; set; }
    //شناسه پکیج 
    public long PackageId { get; set; }
    //شناسه تراکنش 
    public long? TransactionId { get; set; }
    //وضعیت پرداخت 
    public PaymentStatus PaymentStatus { get; set; }
    //تاریخ پرداخت 
    public DateTime? PaymentDate { get; set; }
    //شناسه کاربر 
    public long UserId { get; set; }
    //شناسه آدرس کاربر 
    public long UserAddressId { get; set; }
    // 
    public PaymentMethod? PaymentMethod { get; set; }
    // 
    public string? UserAddressText { get; set; }
    // 
    public List<GetUserOrderResponseFactorDetail>? FactorDetails { get; set; }
    // وضعیت ارسال سفارش
    public DeliveryStatus DeliveryStatus { get; set; }
    // کدرهگیری مرسوله
    public string? TrackingCode { get; set; }
    // توضیحات ارسال
    public string? DeliveryDescription { get; set; }
    // نام کامل کاربر
    public string? UserFullName { get; set; }
    // کدملی کاربر
    public string? UserNationalCode { get; set; }
    // اطلاعات مالیات بر ارزش افزوده
    public OrderVATInfoDto? VatInfo { get; set; }
}

/// <summary>
/// اطلاعات مالیات بر ارزش افزوده
/// </summary>
public class OrderVATInfoDto
{
    /// <summary>
    /// نرخ مالیات (مثلاً 0.09 = 9%)
    /// </summary>
    public decimal VatRate { get; set; }
    /// <summary>
    /// مبلغ پایه (قبل از مالیات)
    /// </summary>
    public long BaseAmount { get; set; }
    /// <summary>
    /// مبلغ مالیات
    /// </summary>
    public long VatAmount { get; set; }
    /// <summary>
    /// مبلغ کل (پایه + مالیات)
    /// </summary>
    public long TotalAmount { get; set; }
    /// <summary>
    /// آیا پرداخت شده
    /// </summary>
    public bool IsPaid { get; set; }
}

public class GetUserOrderResponseFactorDetail
{
    //شناسه 
    public long ProductId { get; set; }
    // 
    public string ProductTitle { get; set; }
    // 
    public string? ProductThumbnailPath { get; set; }
    // 
    public long? UnitPrice { get; set; }
    // 
    public int? Count { get; set; }
    // 
    public long? UnitDiscountPrice { get; set; }
}
