/*
 * @author Dongmin.lee
 * @since 2026-04-10
 * @version 26.04.10
 * @see <pre>
 *  Copyright (C) 2007 by 313 DEV GRP, Inc - All Rights Reserved
 *  Unauthorized copying of this file, via any medium is strictly prohibited
 *  Proprietary and confidential
 *  Written by 313 developer group <313@313.co.kr>, December 2010
 * </pre>
 */
package com.arms.api.ai.search.controller;

import com.arms.api.ai.search.model.dto.AiKeywordSearchRequestDTO;
import com.arms.api.ai.search.model.vo.AiSearchDocumentVO;
import com.arms.api.ai.search.service.WikiSearchService;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
import org.springframework.http.ResponseEntity;
import org.springframework.web.bind.annotation.PostMapping;
import org.springframework.web.bind.annotation.RequestBody;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import java.util.List;

/**
 * AI 키워드 검색 컨트롤러
 *
 * <p>AI 프로젝트(Java-Service-Tree-Framework-AI)의 SearchEngine 단계에서
 * 호출되는 엔드포인트를 제공합니다.</p>
 *
 * <pre>
 * 엔드포인트:
 *   POST /ai-search/keyword
 *     요청: { "keywords": ["키워드1", "키워드2", ...] }
 *     응답: List&lt;AiSearchDocumentVO&gt;
 *
 * 검색 대상 인덱스: wiki
 * 검색 방식: keywords OR 조건 (title, content 필드)
 * </pre>
 */
@Slf4j
@RestController
@RequestMapping("/ai-search")
@RequiredArgsConstructor
public class AiSearchController {

    private final WikiSearchService wikiSearchService;

    /**
     * 키워드 목록으로 wiki 인덱스를 검색합니다.
     *
     * <p>POST /ai-search/keyword</p>
     *
     * <p>요청 예시:</p>
     * <pre>{@code
     * {
     *   "keywords": ["요구사항", "일정관리", "리스크"]
     * }
     * }</pre>
     *
     * <p>응답 예시:</p>
     * <pre>{@code
     * [
     *   {
     *     "id": "doc-001",
     *     "keyword": "요구사항, 일정관리, 리스크",
     *     "title": "프로젝트 요구사항 관리 가이드",
     *     "content": "...",
     *     "score": 1.85,
     *     "metadata": { "index": "wiki" }
     *   }
     * ]
     * }</pre>
     *
     * @param request 키워드 목록을 담은 요청 DTO
     * @return wiki 검색 결과 문서 목록
     */
    @PostMapping("/keyword")
    public ResponseEntity<List<AiSearchDocumentVO>> searchByKeyword(
            @RequestBody AiKeywordSearchRequestDTO request) {

        log.info("AiSearchController :: searchByKeyword | keywords={}", request.getKeywords());

        if (request.getKeywords() == null || request.getKeywords().isEmpty()) {
            log.warn("AiSearchController :: searchByKeyword | keywords 가 비어 있습니다.");
            return ResponseEntity.badRequest().build();
        }

        List<AiSearchDocumentVO> results = wikiSearchService.searchByKeywords(request.getKeywords());

        log.info("AiSearchController :: searchByKeyword 완료 | 결과 수={}", results.size());

        return ResponseEntity.ok(results);
    }
}
