package com.unicorn.hgzero.ai.infra.llm;

import com.unicorn.hgzero.ai.biz.gateway.LlmGateway;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

import java.util.List;

/**
 * OpenAI LLM Gateway 구현체
 * OpenAI API를 사용한 LLM 연동
 */
@Slf4j
@Component
@RequiredArgsConstructor
public class OpenAiLlmGateway implements LlmGateway {

    // TODO: OpenAI API 클라이언트 주입
    // private final OpenAiClient openAiClient;

    @Override
    public String generateTranscript(String transcriptText, String title, List<String> participants, List<String> agenda) {
        log.info("Generating transcript using OpenAI: title={}", title);

        // TODO: OpenAI API 호출
        // 1. 프롬프트 구성 (회의록 자동 작성 프롬프트)
        // 2. GPT-4 호출
        // 3. 응답 JSON 파싱
        // 4. 반환

        // 임시 mock 응답
        return """
            {
              "summary": "회의록 자동 생성 요약",
              "discussions": [
                {
                  "topic": "프로젝트 진행 상황",
                  "speaker": "김철수",
                  "content": "현재 80% 진행 중"
                }
              ],
              "decisions": [
                {
                  "content": "React로 프론트엔드 개발",
                  "decisionMaker": "이영희",
                  "category": "기술"
                }
              ],
              "pendingItems": ["추가 예산 검토", "외주 업체 선정"]
            }
            """;
    }

    @Override
    public String extractTodos(String minutesContent) {
        log.info("Extracting todos using OpenAI");

        // TODO: OpenAI API 호출 (Todo 추출 프롬프트)
        return """
            {
              "todos": [
                {
                  "content": "API 설계서 작성",
                  "assignee": "박민수",
                  "dueDate": "2025-01-30",
                  "priority": "HIGH",
                  "sectionReference": "결정사항 #3"
                }
              ]
            }
            """;
    }

    @Override
    public String generateSummary(String sectionContent, String meetingContext) {
        log.info("Generating section summary using OpenAI");

        // TODO: OpenAI API 호출 (섹션 요약 프롬프트)
        return "AI 기반 회의록 자동화 서비스로 결정. 타겟은 중소기업 및 스타트업이며, 주요 기능은 음성인식, AI 요약, Todo 추출입니다.";
    }

    @Override
    public String detectTerms(String text, String organizationId) {
        log.info("Detecting terms using OpenAI: organizationId={}", organizationId);

        // TODO: OpenAI API 호출 (전문용어 감지 프롬프트)
        return """
            {
              "terms": [
                {
                  "term": "MSA",
                  "position": {"line": 5, "offset": 42},
                  "confidence": 0.92,
                  "category": "기술",
                  "highlight": true
                }
              ]
            }
            """;
    }

    @Override
    public String suggestDiscussions(String transcriptText, List<String> agenda) {
        log.info("Suggesting discussions using OpenAI");

        // TODO: OpenAI API 호출 (논의사항 제안 프롬프트)
        return """
            {
              "suggestions": [
                {
                  "id": "sugg-001",
                  "topic": "보안 요구사항 검토",
                  "reason": "안건에 포함되어 있으나 아직 논의되지 않음",
                  "priority": "HIGH",
                  "relatedAgenda": "프로젝트 개요",
                  "estimatedTime": 15
                }
              ]
            }
            """;
    }

    @Override
    public String suggestDecisions(String transcriptText) {
        log.info("Suggesting decisions using OpenAI");

        // TODO: OpenAI API 호출 (결정사항 제안 프롬프트)
        return """
            {
              "suggestions": [
                {
                  "id": "dec-001",
                  "content": "React로 프론트엔드 개발",
                  "category": "기술",
                  "decisionMaker": "김철수",
                  "participants": ["김철수", "이영희"],
                  "confidence": 0.85,
                  "extractedFrom": "프론트엔드는 React로 개발하기로 했습니다",
                  "context": "팀원 대부분이 React 경험이 있어 개발 속도가 빠를 것으로 예상"
                }
              ]
            }
            """;
    }
}
