// EN: Command to pay for an order with payment method details.
// VI: Command thanh toán order với chi tiết phương thức thanh toán.

using MediatR;

namespace OrderService.API.Application.Commands;

/// <summary>
/// EN: Command to process payment for an order. Supports cash, card, vnpay, momo.
/// VI: Command xử lý thanh toán cho order. Hỗ trợ tiền mặt, thẻ, vnpay, momo.
/// </summary>
public record PayOrderCommand(
    Guid OrderId,
    Guid ShopId,
    string PaymentMethod,       // EN: "cash", "card", "vnpay", "momo" / VI: "cash", "card", "vnpay", "momo"
    decimal? AmountTendered,    // EN: For cash payments (amount customer gave) / VI: Cho thanh toán tiền mặt (số tiền khách đưa)
    string? ReturnUrl,          // EN: For online payments (redirect after payment) / VI: Cho thanh toán trực tuyến (redirect sau thanh toán)
    string? IpAddress           // EN: For online payments (client IP) / VI: Cho thanh toán trực tuyến (IP client)
) : IRequest<PayOrderResult>;

/// <summary>
/// EN: Result of pay order command.
/// VI: Kết quả command thanh toán order.
/// </summary>
public record PayOrderResult(
    bool Success,
    string Status,
    string? PaymentUrl,         // EN: Redirect URL for VNPay/Momo / VI: URL redirect cho VNPay/Momo
    decimal? ChangeAmount,      // EN: Change for cash payments / VI: Tiền thối cho thanh toán tiền mặt
    string? TransactionId,      // EN: Transaction ID / VI: Mã giao dịch
    string? ErrorMessage        // EN: Error message if failed / VI: Thông báo lỗi nếu thất bại
);
