package ru.ibs.socrates.confexporter.service.content.service;

import ru.ibs.socrates.confexporter.external.sdtllmraggateconf.model.ContentHttpViewModel;
import ru.ibs.socrates.confexporter.external.sdtllmraggateconf.model.ReadTextHttpResponse;
import ru.ibs.socrates.confexporter.external.sdtllmraggateconf.model.SourceHttpViewModel;
import ru.ibs.socrates.confexporter.external.sdtllmraggateconf.rabbitmq.dto.SdtLlmRagGateEventDto;

/**
 * Сервис для обработки контента.
 * - Интеграция с RabbitMQ (события Create/Update/Delete)
 */
public interface ProcessContentService {
  
  /**
   * Обрабатывает контент из RabbitMQ-сообщения.
   * 
   * @see <a href="https://conf.ibs.ru/pages/viewpage.action?pageId=375908767">
   *     Формат передачи RagGate Service -> LLM Лайфик Brain</a>
   *
   * @param event событие
   * @throws IllegalArgumentException если eventType некорректен
   * @throws jakarta.persistence.EntityNotFoundException если контент не найден (для Update/Delete)
   */
  void processContent(SdtLlmRagGateEventDto event);
  
  /**
   * Обрабатывает контент из RabbitMQ-сообщения.
   *
   * @param externalMessagelId ID контента из сообщения (формат UUID)
   * @param eventType Тип события: "Create", "Update" или "Delete"
   * @throws IllegalArgumentException если eventType некорректен
   * @throws jakarta.persistence.EntityNotFoundException если контент не найден (для Update/Delete)
   */
  void processContent(String externalMessagelId, String eventType);

  /**
   * Вспомогательный холдер данных.
   */
  record ContentHolder(
      SourceHttpViewModel source,
      ContentHttpViewModel content,
      ReadTextHttpResponse text,
      String parsedContent) {}
}
