using MediatR;

namespace CMSMicroservice.Application.PackageCQ.Commands.VerifyBasePackagePayment;

/// <summary>
/// تکمیل یا رد پرداخت پکیج پایه (فراخوانی توسط BFF بعد از Callback)
/// </summary>
public record VerifyBasePackagePaymentCommand : IRequest<VerifyBasePackagePaymentResponseDto>
{
    /// <summary>
    /// شناسه سفارش CMS
    /// </summary>
    public long OrderId { get; init; }
    
    /// <summary>
    /// شناسه تراکنش CMS
    /// </summary>
    public long TransactionId { get; init; }
    
    /// <summary>
    /// آیا پرداخت موفق بوده؟ (نتیجه Verify از BFF)
    /// </summary>
    public bool PaymentSuccess { get; init; }
    
    /// <summary>
    /// کد پیگیری بانکی (در صورت موفقیت)
    /// </summary>
    public string? RefId { get; init; }
    
    /// <summary>
    /// پیام از درگاه
    /// </summary>
    public string? Message { get; init; }
}

public class VerifyBasePackagePaymentResponseDto
{
    /// <summary>
    /// موفقیت عملیات
    /// </summary>
    public bool Success { get; set; }
    
    /// <summary>
    /// پیام
    /// </summary>
    public string Message { get; set; } = string.Empty;
    
    /// <summary>
    /// شناسه سفارش
    /// </summary>
    public long OrderId { get; set; }
    
    /// <summary>
    /// شناسه تراکنش
    /// </summary>
    public long TransactionId { get; set; }
    
    /// <summary>
    /// کد پیگیری بانکی
    /// </summary>
    public string? ReferenceCode { get; set; }
    
    /// <summary>
    /// موجودی کیف پول بعد از شارژ
    /// </summary>
    public long WalletBalance { get; set; }
    
    /// <summary>
    /// موجودی تخفیف بعد از شارژ
    /// </summary>
    public long DiscountBalance { get; set; }
}
