package com.zioinfo.kintex.publicsite.assistant;

import com.zioinfo.kintex.common.ApiResponse;
import com.zioinfo.kintex.publicsite.assistant.dto.VisitorAssistantDtos.AssistantRequest;
import com.zioinfo.kintex.publicsite.assistant.dto.VisitorAssistantDtos.AssistantResult;
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;

/**
 * 공개 AI 관람 도우미 API (비인증, {@code /api/public/**} permitAll).
 *
 * <p>POST /api/public/ai/visitor-assistant — 자연어 질문을 적재 DB(V43: 전시 캘린더·방문가이드·교통) 근거로
 * 답한다. 응답은 답변 + 근거 카드 + 인용 출처 + degraded 플래그를 정직하게 담는다(환각 방지).
 * AI(Claude→Ollama) 미가용 시 검색 요약으로 자동 폴백한다. 외부 실시간 크롤 호출은 하지 않는다.
 */
@RestController
@RequestMapping("/api/public/ai")
public class VisitorAssistantController {

    private final VisitorAssistantService service;

    public VisitorAssistantController(VisitorAssistantService service) {
        this.service = service;
    }

    @PostMapping("/visitor-assistant")
    public ApiResponse<AssistantResult> visitorAssistant(@RequestBody(required = false) AssistantRequest req) {
        return ApiResponse.ok(service.ask(req == null ? null : req.question()));
    }
}
