namespace Marco.Pms.Model.ViewModels.PaymentGetway
{
    public class PaymentDetailsVM
    {
        public Guid Id { get; set; }
        public RazorpayPaymentDetails? RazorpayPaymentDetails { get; set; }
        public RazorpayOrderDetails? RazorpayOrderDetails { get; set; }
    }
    public class RazorpayPaymentDetails
    {
        public string? PaymentId { get; set; }
        public string? OrderId { get; set; }
        public decimal Amount { get; set; }
        public string? Currency { get; set; }
        public string? Status { get; set; } // created, authorized, captured, refunded, failed
        public string? Method { get; set; } // card, netbanking, wallet, upi
        public string? Email { get; set; }
        public string? Contact { get; set; }
        public string? Description { get; set; }
        public string? CustomerName { get; set; }
        public DateTime CreatedAt { get; set; }

        // Payment method specific details
        public CardDetails? CardDetails { get; set; }
        public BankDetails? BankDetails { get; set; }
        public UpiDetails? UpiDetails { get; set; }
        public WalletDetails? WalletDetails { get; set; }

        // Fee and tax
        public decimal Fee { get; set; }
        public decimal Tax { get; set; }

        // Error details (if payment failed)
        public string? ErrorCode { get; set; }
        public string? ErrorDescription { get; set; }

        // Additional flags
        public bool InternationalPayment { get; set; }
        public bool Captured { get; set; }
    }

    public class CardDetails
    {
        public string? CardId { get; set; }
        public string? Last4Digits { get; set; }
        public string? Network { get; set; } // Visa, MasterCard, Amex, RuPay
        public string? CardType { get; set; } // credit, debit, prepaid
        public string? Issuer { get; set; } // Bank name
        public bool International { get; set; }
        public bool Emi { get; set; }
        public string? SubType { get; set; } // consumer, business
    }

    public class BankDetails
    {
        public string? Bank { get; set; }
        public string? BankCode { get; set; }
    }

    public class UpiDetails
    {
        public string? Vpa { get; set; } // UPI ID
        public string? Provider { get; set; }
    }

    public class WalletDetails
    {
        public string? WalletName { get; set; } // paytm, phonepe, amazonpay, freecharge, jiomoney, olamoney
    }

    public class RazorpayOrderDetails
    {
        public string? OrderId { get; set; }
        public decimal Amount { get; set; }
        public string? Currency { get; set; }
        public string? Status { get; set; }
        public string? Receipt { get; set; }
        public DateTime CreatedAt { get; set; }
        public decimal AmountPaid { get; set; }
        public decimal AmountDue { get; set; }
        public int Attempts { get; set; }
    }
}
