// EN: Booking domain events.
// VI: Domain events của Booking.

using BookingService.Domain.AggregatesModel.AppointmentAggregate;
using BookingService.Domain.AggregatesModel.TherapistAggregate;
using MediatR;

namespace BookingService.Domain.Events;

// ==================== Appointment Events ====================

/// <summary>
/// EN: Domain event raised when an appointment is created.
/// VI: Domain event phát ra khi lịch hẹn được tạo.
/// </summary>
public record AppointmentCreatedDomainEvent(Appointment Appointment) : INotification;

/// <summary>
/// EN: Domain event raised when an appointment is confirmed.
/// VI: Domain event phát ra khi lịch hẹn được xác nhận.
/// </summary>
public record AppointmentConfirmedDomainEvent(Appointment Appointment) : INotification;

/// <summary>
/// EN: Domain event raised when an appointment is completed.
/// VI: Domain event phát ra khi lịch hẹn hoàn thành.
/// </summary>
public record AppointmentCompletedDomainEvent(Appointment Appointment) : INotification;

/// <summary>
/// EN: Domain event raised when an appointment is cancelled.
/// VI: Domain event phát ra khi lịch hẹn bị hủy.
/// </summary>
public record AppointmentCancelledDomainEvent(Appointment Appointment, string Reason) : INotification;

// ==================== Therapist Events ====================

/// <summary>
/// EN: Domain event raised when a therapist is created.
/// VI: Domain event phát ra khi chuyên viên được tạo.
/// </summary>
public record TherapistCreatedDomainEvent(Therapist Therapist) : INotification;

/// <summary>
/// EN: Domain event raised when a therapist is updated.
/// VI: Domain event phát ra khi chuyên viên được cập nhật.
/// </summary>
public record TherapistUpdatedDomainEvent(Therapist Therapist) : INotification;
