// EN: Domain events for MerchantStaff aggregate.
// VI: Domain events cho MerchantStaff aggregate.

using MediatR;
using MerchantService.Domain.AggregatesModel.MerchantStaffAggregate;

namespace MerchantService.Domain.Events;

/// <summary>
/// EN: Raised when a staff member is invited.
/// VI: Được phát ra khi nhân viên được mời.
/// </summary>
public record StaffInvitedDomainEvent(MerchantStaff Staff) : INotification;

/// <summary>
/// EN: Raised when a staff member accepts invitation and joins.
/// VI: Được phát ra khi nhân viên chấp nhận lời mời và gia nhập.
/// </summary>
public record StaffJoinedDomainEvent(MerchantStaff Staff) : INotification;

/// <summary>
/// EN: Raised when a staff member sets their PIN code.
/// VI: Được phát ra khi nhân viên đặt mã PIN.
/// </summary>
public record StaffPinCodeSetDomainEvent(MerchantStaff Staff) : INotification;

/// <summary>
/// EN: Raised when a staff member registers a device.
/// VI: Được phát ra khi nhân viên đăng ký thiết bị.
/// </summary>
public record StaffDeviceRegisteredDomainEvent(MerchantStaff Staff, DeviceToken Device) : INotification;

/// <summary>
/// EN: Raised when a staff member is assigned to a shop.
/// VI: Được phát ra khi nhân viên được gán vào shop.
/// </summary>
public record StaffAssignedToShopDomainEvent(MerchantStaff Staff, ShopMember Assignment) : INotification;

/// <summary>
/// EN: Raised when a staff member's employment is terminated.
/// VI: Được phát ra khi nhân viên bị chấm dứt hợp đồng.
/// </summary>
public record StaffTerminatedDomainEvent(MerchantStaff Staff) : INotification;
