namespace PromotionService.Domain.Events;

using MediatR;

/// <summary>
/// EN: Event raised when a new campaign is created.
/// VI: Sự kiện được phát ra khi chiến dịch mới được tạo.
/// </summary>
public record CampaignCreatedDomainEvent(
    Guid CampaignId,
    Guid MerchantId,
    string CampaignName) : INotification;

/// <summary>
/// EN: Event raised when a campaign is activated.
/// VI: Sự kiện được phát ra khi chiến dịch được kích hoạt.
/// </summary>
public record CampaignActivatedDomainEvent(
    Guid CampaignId,
    Guid MerchantId) : INotification;

/// <summary>
/// EN: Event raised when a campaign is cancelled.
/// VI: Sự kiện được phát ra khi chiến dịch bị hủy.
/// </summary>
public record CampaignCancelledDomainEvent(
    Guid CampaignId,
    Guid MerchantId,
    Guid? EscrowHoldId) : INotification;

/// <summary>
/// EN: Event raised when a voucher is claimed by a user.
/// VI: Sự kiện được phát ra khi voucher được nhận bởi người dùng.
/// </summary>
public record VoucherClaimedDomainEvent(
    Guid VoucherId,
    Guid CampaignId,
    Guid UserId,
    string VoucherCode) : INotification;

/// <summary>
/// EN: Event raised when a voucher is redeemed.
/// VI: Sự kiện được phát ra khi voucher được sử dụng.
/// </summary>
public record VoucherRedeemedDomainEvent(
    Guid VoucherId,
    Guid CampaignId,
    Guid UserId,
    decimal AmountUsed,
    decimal AmountRefunded) : INotification;
