package com.erp.ai.config;

import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Primary;
import org.springframework.web.client.RestClient;

import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;

/**
 * AI 에이전트 인프라 빈 설정.
 * - aiAgentExecutor: 가상 스레드 ExecutorService (병렬 LLM 호출용)
 * - aiObjectMapper: JSON 파싱용 (Spring 기본 ObjectMapper 재사용)
 * - llmRestClient: LLM HTTP 호출용 RestClient
 */
@Configuration
public class AiAgentConfig {

    /**
     * 가상 스레드 풀 — IO-bound LLM 호출 다수 동시 실행.
     */
    @Bean(name = "aiAgentExecutor")
    public ExecutorService aiAgentExecutor() {
        return Executors.newVirtualThreadPerTaskExecutor();
    }

    /**
     * AI 모듈 전용 ObjectMapper. 기존 Spring 의 ObjectMapper 와 별개로 명시적으로 선언.
     */
    @Bean(name = "aiObjectMapper")
    public ObjectMapper aiObjectMapper() {
        return new ObjectMapper();
    }

    /**
     * LLM HTTP 클라이언트. baseUrl 미지정 — 각 LlmClient 구현체에서 절대 URL 사용.
     */
    @Bean(name = "llmRestClient")
    public RestClient llmRestClient() {
        return RestClient.builder()
                .defaultHeader("User-Agent", "invyone-ai/1.0")
                .build();
    }
}
