// AIService.js
// -----------------------------------------------------------------------------
// 백엔드 `/chat` 엔드포인트 호출 전용 모듈.
// - question    : 사용자가 보낸 텍스트
// - toolId      : 엔진 ID (ex: dev_chatbot)
// - sessionId   : 세션 지속용 ID (null이면 서버가 새로 발급)
// - files       : 첨부 파일 배열
// 응답 형태 { response, sessionId, toolName }
// 프론트엔드의 ChatHandler / ChatInput 등에서 재사용한다.
// -----------------------------------------------------------------------------

// 실제 운영환경에서는 REACT_APP_* 형태의 .env 값을 사용하도록 권장.
const OPENAI_API_KEY = process.env.REACT_APP_OPENAI_API_KEY;

// FastAPI 서버 주소 – 필요시 프록시 / env 로 분리.
const API_BASE_URL = 'http://localhost:8010';

/**
 * 챗봇 API 호출 함수 (multipart/form-data)
 * @param {string} question      - 사용자 질문
 * @param {string} toolId        - 엔진 ID
 * @param {string|null} sessionId- 세션 ID (옵션)
 * @param {File[]} files    - 첨부 파일 배열
 * @returns {Promise<{response:string, sessionId:string, toolName:string}>}
 */
const AIService = async (question, toolId, sessionId = null, files = []) => {
  try {
    // ------------ FormData 구성 -------------
    const formData = new FormData();
    formData.append('message', question);
    formData.append('tool_id', toolId);

    if (sessionId) formData.append('session_id', sessionId);

    files.forEach(file => formData.append('image', file));

    // ------------- Fetch  -------------------
    const response = await fetch(`${API_BASE_URL}/chat`, {
      method: 'POST',
      body: formData,
    });

    if (!response.ok) throw new Error(`HTTP error! status: ${response.status}`);

    const data = await response.json();
    return {
      response : data.response?.trim() || 'AI 응답을 생성하지 못했습니다.',
      sessionId: data.session_id,
      toolName : data.tool_name,
    };
  } catch (e) {
    console.error('AI 서비스 오류:', e);
    return { response: 'AI 응답을 생성하지 못했습니다.', sessionId: null, toolName: '' };
  }
};

export default AIService; 