using MediatR;

namespace PromotionService.API.Application.Commands;

/// <summary>
/// EN: Command to update a campaign.
/// VI: Command để cập nhật chiến dịch.
/// </summary>
public record UpdateCampaignCommand(
    Guid CampaignId,
    string? Name = null,
    string? Description = null,
    DateTime? StartDate = null,
    DateTime? EndDate = null,
    int? MaxPerUser = null) : IRequest<bool>;

/// <summary>
/// EN: Command to force complete a campaign.
/// VI: Command để bắt buộc hoàn thành chiến dịch.
/// </summary>
public record CompleteCampaignCommand(Guid CampaignId) : IRequest<bool>;

/// <summary>
/// EN: Command to soft delete a campaign.
/// VI: Command để xóa mềm chiến dịch.
/// </summary>
public record DeleteCampaignCommand(Guid CampaignId) : IRequest<bool>;

/// <summary>
/// EN: Command to revoke a voucher.
/// VI: Command để thu hồi voucher.
/// </summary>
public record RevokeVoucherCommand(
    Guid VoucherId,
    string Reason) : IRequest<bool>;

/// <summary>
/// EN: Command to extend voucher expiry.
/// VI: Command để gia hạn voucher.
/// </summary>
public record ExtendVoucherExpiryCommand(
    Guid VoucherId,
    int AdditionalDays) : IRequest<bool>;
