using MediatR;
using WhatsAppService.Domain.AggregatesModel.CustomerAggregate;

namespace WhatsAppService.Domain.Events;

/// <summary>
/// EN: Domain event raised when customer opt-in status changes.
/// VI: Domain event được phát ra khi trạng thái đồng ý của khách hàng thay đổi.
/// </summary>
public class CustomerOptInChangedEvent : INotification
{
    /// <summary>
    /// EN: The customer ID.
    /// VI: ID của khách hàng.
    /// </summary>
    public Guid CustomerId { get; }

    /// <summary>
    /// EN: The shop ID.
    /// VI: ID của shop.
    /// </summary>
    public Guid ShopId { get; }

    /// <summary>
    /// EN: The customer's WhatsApp ID.
    /// VI: WhatsApp ID của khách hàng.
    /// </summary>
    public string WaId { get; }

    /// <summary>
    /// EN: The previous consent.
    /// VI: Đồng ý trước đó.
    /// </summary>
    public OptInConsent PreviousConsent { get; }

    /// <summary>
    /// EN: The new consent.
    /// VI: Đồng ý mới.
    /// </summary>
    public OptInConsent NewConsent { get; }

    public CustomerOptInChangedEvent(
        Guid customerId,
        Guid shopId,
        string waId,
        OptInConsent previousConsent,
        OptInConsent newConsent)
    {
        CustomerId = customerId;
        ShopId = shopId;
        WaId = waId;
        PreviousConsent = previousConsent;
        NewConsent = newConsent;
    }
}
