using MediatR;

namespace MktZaloService.Domain.Events;

/// <summary>
/// EN: Event raised when a message is received in a conversation.
/// VI: Sự kiện khi tin nhắn được nhận trong cuộc hội thoại.
/// </summary>
public record MessageReceivedDomainEvent(
    Guid ConversationId,
    Guid MessageId,
    string Content,
    bool IsFromBot) : INotification;

/// <summary>
/// EN: Event raised when a conversation is closed.
/// VI: Sự kiện khi cuộc hội thoại được đóng.
/// </summary>
public record ConversationClosedDomainEvent(
    Guid ConversationId) : INotification;

/// <summary>
/// EN: Event raised when a new conversation is started.
/// VI: Sự kiện khi cuộc hội thoại mới được bắt đầu.
/// </summary>
public record ConversationStartedDomainEvent(
    Guid ConversationId,
    Guid CustomerId,
    string ZaloUserId) : INotification;

/// <summary>
/// EN: Event raised when a customer profile is updated.
/// VI: Sự kiện khi hồ sơ khách hàng được cập nhật.
/// </summary>
public record CustomerProfileUpdatedDomainEvent(
    Guid CustomerId,
    string ZaloUserId) : INotification;

/// <summary>
/// EN: Event raised when a new customer is created.
/// VI: Sự kiện khi khách hàng mới được tạo.
/// </summary>
public record CustomerCreatedDomainEvent(
    Guid CustomerId,
    string ZaloUserId,
    string DisplayName) : INotification;

/// <summary>
/// EN: Event raised when a chatbot rule matches a message.
/// VI: Sự kiện khi quy tắc chatbot khớp với tin nhắn.
/// </summary>
public record ChatbotRuleMatchedDomainEvent(
    Guid RuleId,
    Guid ConversationId,
    string MatchedMessage) : INotification;

/// <summary>
/// EN: Event raised when an outgoing message is sent via Zalo.
/// VI: Sự kiện khi tin nhắn đi được gửi qua Zalo.
/// </summary>
public record MessageSentDomainEvent(
    Guid ConversationId,
    Guid MessageId,
    string ZaloMessageId) : INotification;
