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

namespace PromotionService.API.Application.Commands;

/// <summary>
/// EN: Command to create a new campaign.
/// VI: Command để tạo chiến dịch mới.
/// </summary>
public record CreateCampaignCommand(
    Guid MerchantId,
    Guid MerchantWalletId,
    string Name,
    string? Description,
    string BackingAssetType,
    string BackingAssetCode,
    decimal FaceValue,
    string AcquisitionType,
    decimal AcquisitionPrice,
    int TotalVouchers,
    DateTime StartDate,
    DateTime EndDate,
    int VoucherValidityDays = 30,
    int MaxPerUser = 1) : IRequest<CampaignDto>;

/// <summary>
/// EN: Command to activate a campaign.
/// VI: Command để kích hoạt chiến dịch.
/// </summary>
public record ActivateCampaignCommand(Guid CampaignId) : IRequest<bool>;

/// <summary>
/// EN: Command to pause a campaign.
/// VI: Command để tạm dừng chiến dịch.
/// </summary>
public record PauseCampaignCommand(Guid CampaignId) : IRequest<bool>;

/// <summary>
/// EN: Command to cancel a campaign.
/// VI: Command để hủy chiến dịch.
/// </summary>
public record CancelCampaignCommand(Guid CampaignId) : IRequest<bool>;
