// EN: Domain event when a new merchant is registered.
// VI: Domain event khi merchant mới được đăng ký.

using MediatR;
using MerchantService.Domain.AggregatesModel.MerchantAggregate;

namespace MerchantService.Domain.Events;

/// <summary>
/// EN: Raised when a new merchant registers.
/// VI: Được phát ra khi merchant mới đăng ký.
/// </summary>
public record MerchantRegisteredDomainEvent(Merchant Merchant) : INotification;

/// <summary>
/// EN: Raised when a merchant submits verification documents.
/// VI: Được phát ra khi merchant nộp tài liệu xác minh.
/// </summary>
public record MerchantVerificationSubmittedDomainEvent(Merchant Merchant) : INotification;

/// <summary>
/// EN: Raised when a merchant is approved by admin.
/// VI: Được phát ra khi merchant được admin phê duyệt.
/// </summary>
public record MerchantApprovedDomainEvent(Merchant Merchant, Guid ApprovedBy) : INotification;

/// <summary>
/// EN: Raised when a merchant is suspended.
/// VI: Được phát ra khi merchant bị tạm ngưng.
/// </summary>
public record MerchantSuspendedDomainEvent(Merchant Merchant, string Reason) : INotification;

/// <summary>
/// EN: Raised when a merchant is permanently banned.
/// VI: Được phát ra khi merchant bị cấm vĩnh viễn.
/// </summary>
public record MerchantBannedDomainEvent(Merchant Merchant, string Reason) : INotification;
