using MediatR;
using PromotionService.API.Application.DTOs;

namespace PromotionService.API.Application.Commands;

/// <summary>
/// EN: Command to claim a free voucher.
/// VI: Command để nhận voucher miễn phí.
/// </summary>
public record ClaimVoucherCommand(
    Guid CampaignId,
    Guid UserId) : IRequest<VoucherDto>;

/// <summary>
/// EN: Command to exchange points for a voucher.
/// VI: Command để đổi điểm lấy voucher.
/// </summary>
public record ExchangeVoucherCommand(
    Guid CampaignId,
    Guid UserId,
    Guid UserWalletId) : IRequest<VoucherDto>;

/// <summary>
/// EN: Command to purchase a voucher.
/// VI: Command để mua voucher.
/// </summary>
public record PurchaseVoucherCommand(
    Guid CampaignId,
    Guid UserId,
    Guid UserWalletId) : IRequest<VoucherDto>;

/// <summary>
/// EN: Command to redeem a voucher for an order.
/// VI: Command để sử dụng voucher cho đơn hàng.
/// </summary>
public record RedeemVoucherCommand(
    string VoucherCode,
    Guid UserId,
    Guid? OrderId,
    decimal OrderAmount) : IRequest<RedemptionDto>;
