namespace CMSMicroservice.Domain.Entities.Payment;

/// <summary>
/// جدول ثبت تراکنش‌های درگاه پرداخت آنلاین
/// الگو از PYMS — همه فیلدهای gateway-level اینجا ذخیره می‌شوند
/// جدول Transaction فعلی دست‌نخورده باقی می‌ماند
/// </summary>
public class PaymentTransaction : BaseAuditableEntity
{
    // ── اطلاعات درخواست (مرحله Request) ──

    /// <summary>نام درگاه (zarinpal, daya, mock, ...)</summary>
    public string GatewayProvider { get; set; } = string.Empty;

    /// <summary>شناسه مرچنت مورد استفاده</summary>
    public string MerchantId { get; set; } = string.Empty;

    /// <summary>مبلغ به تومان</summary>
    public long Amount { get; set; }

    /// <summary>آدرس بازگشت بعد از پرداخت</summary>
    public string CallbackUrl { get; set; } = string.Empty;

    /// <summary>شرح تراکنش</summary>
    public string Description { get; set; } = string.Empty;

    /// <summary>شماره موبایل پرداخت‌کننده</summary>
    public string? Mobile { get; set; }

    /// <summary>شناسه کاربر</summary>
    public long? UserId { get; set; }

    // ── پاسخ درخواست (بعد از فراخوانی Request API) ──

    /// <summary>کد وضعیت درخواست (100=موفق در زرین‌پال)</summary>
    public int? RequestStatusCode { get; set; }

    /// <summary>پیام درخواست</summary>
    public string? RequestStatusMessage { get; set; }

    /// <summary>Authority — کلید یکتای تراکنش در درگاه</summary>
    public string? Authority { get; set; }

    // ── وضعیت پرداخت ──

    /// <summary>آیا پرداخت موفق بوده؟</summary>
    public bool PaymentStatus { get; set; }

    // ── نتیجه تأیید (بعد از Verify API) ──

    /// <summary>کد وضعیت verify (100=موفق، 101=قبلاً تأیید شده)</summary>
    public int? VerificationStatusCode { get; set; }

    /// <summary>پیام verify</summary>
    public string? VerificationStatusMessage { get; set; }

    /// <summary>هش کارت بانکی</summary>
    public string? CardHash { get; set; }

    /// <summary>شماره کارت ماسک‌شده (مثلاً 6037-****-****-1234)</summary>
    public string? CardPan { get; set; }

    /// <summary>شماره مرجع بانکی (RefId عددی زرین‌پال — کد پیگیری)</summary>
    public string? RefId { get; set; }

    // ── ارتباط با سیستم داخلی ──

    /// <summary>شناسه Transaction داخلی (جدول Transactions فعلی)</summary>
    public long? TransactionId { get; set; }

    /// <summary>شناسه سفارش (اگر مرتبط با سفارش باشد)</summary>
    public string? OrderId { get; set; }
}
