package com.kt.ai.test.manual;

import com.kt.ai.kafka.message.AIJobMessage;
import com.kt.ai.test.integration.kafka.KafkaTestProducer;

import java.time.LocalDateTime;

/**
 * Kafka 수동 테스트
 *
 * 이 클래스는 main 메서드를 실행하여 Kafka에 메시지를 직접 전송할 수 있습니다.
 * IDE에서 직접 실행하거나 Gradle로 실행할 수 있습니다.
 *
 * @author AI Service Team
 * @since 1.0.0
 */
public class KafkaManualTest {

    // Kafka 설정 (환경에 맞게 수정)
    private static final String BOOTSTRAP_SERVERS = "20.249.182.13:9095,4.217.131.59:9095";
    private static final String TOPIC = "ai-event-generation-job";

    public static void main(String[] args) {
        System.out.println("=== Kafka 수동 테스트 시작 ===");
        System.out.println("Bootstrap Servers: " + BOOTSTRAP_SERVERS);
        System.out.println("Topic: " + TOPIC);

        KafkaTestProducer producer = new KafkaTestProducer(BOOTSTRAP_SERVERS, TOPIC);

        try {
            // 테스트 메시지 1: 기본 메시지
            AIJobMessage message1 = createTestMessage(
                    "manual-job-001",
                    "manual-event-001",
                    "신규 고객 유치",
                    "음식점",
                    "강남구",
                    "테스트 BBQ 레스토랑",
                    500000
            );

            System.out.println("\n[메시지 1] 전송 중...");
            producer.sendAIJobMessage(message1);
            System.out.println("[메시지 1] 전송 완료");

            // 테스트 메시지 2: 다른 업종
            AIJobMessage message2 = createTestMessage(
                    "manual-job-002",
                    "manual-event-002",
                    "재방문 유도",
                    "카페",
                    "서초구",
                    "테스트 카페",
                    300000
            );

            System.out.println("\n[메시지 2] 전송 중...");
            producer.sendAIJobMessage(message2);
            System.out.println("[메시지 2] 전송 완료");

            // 테스트 메시지 3: 저예산
            AIJobMessage message3 = createTestMessage(
                    "manual-job-003",
                    "manual-event-003",
                    "매출 증대",
                    "소매점",
                    "마포구",
                    "테스트 편의점",
                    100000
            );

            System.out.println("\n[메시지 3] 전송 중...");
            producer.sendAIJobMessage(message3);
            System.out.println("[메시지 3] 전송 완료");

            System.out.println("\n=== 모든 메시지 전송 완료 ===");
            System.out.println("\n다음 API로 결과를 확인하세요:");
            System.out.println("- Job 상태: GET http://localhost:8083/api/v1/ai-service/internal/jobs/{jobId}/status");
            System.out.println("- AI 추천: GET http://localhost:8083/api/v1/ai-service/internal/recommendations/{eventId}");
            System.out.println("\n예시:");
            System.out.println("  curl http://localhost:8083/api/v1/ai-service/internal/jobs/manual-job-001/status");
            System.out.println("  curl http://localhost:8083/api/v1/ai-service/internal/recommendations/manual-event-001");

        } catch (Exception e) {
            System.err.println("에러 발생: " + e.getMessage());
            e.printStackTrace();
        } finally {
            producer.close();
            System.out.println("\n=== Kafka Producer 종료 ===");
        }
    }

    private static AIJobMessage createTestMessage(
            String jobId,
            String eventId,
            String objective,
            String industry,
            String region,
            String storeName,
            int budget
    ) {
        return AIJobMessage.builder()
                .jobId(jobId)
                .eventId(eventId)
                .objective(objective)
                .industry(industry)
                .region(region)
                .storeName(storeName)
                .targetAudience("20-40대 고객")
                .budget(budget)
                .requestedAt(LocalDateTime.now())
                .build();
    }
}
