package com.kt.ai.config;

import io.swagger.v3.oas.models.OpenAPI;
import io.swagger.v3.oas.models.info.Contact;
import io.swagger.v3.oas.models.info.Info;
import io.swagger.v3.oas.models.servers.Server;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;

import java.util.List;

/**
 * Swagger/OpenAPI 설정
 *
 * @author AI Service Team
 * @since 1.0.0
 */
@Configuration
public class SwaggerConfig {

    @Bean
    public OpenAPI openAPI() {
        Server vmServer = new Server();
        vmServer.setUrl("http://kt-event-marketing-api.20.214.196.128.nip.io/api/v1/ai");
        vmServer.setDescription("VM Development Server");

        Server localServer = new Server();
        localServer.setUrl("http://localhost:8083");
        localServer.setDescription("Local Development Server");

        Server devServer = new Server();
        devServer.setUrl("https://dev-api.kt-event-marketing.com/ai/v1");
        devServer.setDescription("Development Server");

        Server prodServer = new Server();
        prodServer.setUrl("https://api.kt-event-marketing.com/ai/v1");
        prodServer.setDescription("Production Server");

        Contact contact = new Contact();
        contact.setName("Digital Garage Team");
        contact.setEmail("support@kt-event-marketing.com");

        Info info = new Info()
                .title("AI Service API")
                .version("1.0.0")
                .description("""
                        KT AI 기반 소상공인 이벤트 자동 생성 서비스 - AI Service

                        ## 서비스 개요
                        - Kafka를 통한 비동기 AI 추천 처리
                        - Claude API / GPT-4 API 연동
                        - Redis 기반 결과 캐싱 (TTL 24시간)

                        ## 처리 흐름
                        1. Event Service가 Kafka Topic에 Job 메시지 발행
                        2. AI Service가 메시지 구독 및 처리
                        3. 트렌드 분석 수행 (Claude/GPT-4 API)
                        4. 3가지 이벤트 추천안 생성
                        5. 결과를 Redis에 저장 (TTL 24시간)
                        6. Job 상태를 Redis에 업데이트
                        """)
                .contact(contact);

        return new OpenAPI()
                .info(info)
                .servers(List.of(vmServer, localServer, devServer, prodServer));
    }
}
