package dev.lions.events;

import dev.lions.events.AnalyticsEvent;
import dev.lions.exceptions.EventPublicationException;

/**
 * Interface définissant les opérations de publication des événements analytiques.
 * Cette interface fournit les méthodes nécessaires pour publier des événements
 * de manière individuelle ou par lot.
 *
 * @author Lions Dev Team
 * @version 1.0
 */
public interface AnalyticsEventPublisher {

  /**
   * Publie un événement analytique unique.
   *
   * @param event L'événement à publier
   * @throws EventPublicationException Si la publication échoue
   */
  void publish(AnalyticsEvent event) throws EventPublicationException;

  /**
   * Publie un lot d'événements analytiques.
   *
   * @param events Collection d'événements à publier
   * @throws EventPublicationException Si la publication d'un des événements échoue
   */
  void publishBatch(Iterable<AnalyticsEvent> events) throws EventPublicationException;
}