package com.zioinfo.esn.controller;

import com.zioinfo.esn.common.ApiResponse;
import com.zioinfo.esn.config.OllamaClient;
import lombok.RequiredArgsConstructor;
import org.springframework.web.bind.annotation.*;
import java.util.Map;

@RestController
@RequestMapping("/api/ai")
@RequiredArgsConstructor
public class AiController {

    private final OllamaClient ollama;

    /**
     * 알람 AI 이상 분석 — Ollama 온프레미스만 허용.
     */
    @PostMapping("/analyze-alarm")
    public ApiResponse<Map<String, String>> analyzeAlarm(@RequestBody Map<String, Object> body) {
        String alarmType = (String) body.getOrDefault("alarmType", "UNKNOWN");
        String message   = (String) body.getOrDefault("message", "");
        String severity  = (String) body.getOrDefault("severity", "LOW");

        String prompt = String.format(
            "ESL 장치 알람 분석:\n유형: %s\n심각도: %s\n메시지: %s\n\n" +
            "원인 분석 및 조치 방안을 3줄 이내로 간결하게 제시하세요.",
            alarmType, severity, message
        );

        String result = ollama.chat(prompt,
            "당신은 ESL(전자 가격표) 시스템 전문 AI 엔지니어입니다. 알람을 분석하고 실용적인 조치를 제안하세요.");

        return ApiResponse.ok(Map.of("analysis", result, "alarmType", alarmType, "severity", severity));
    }

    /**
     * POS 데이터 AI 분류 — 이상 데이터 자동 감지.
     */
    @PostMapping("/classify-pos")
    public ApiResponse<Map<String, String>> classifyPos(@RequestBody Map<String, Object> body) {
        String productCode = (String) body.getOrDefault("productCode", "");
        String price       = String.valueOf(body.getOrDefault("price", "0"));
        String salePrice   = String.valueOf(body.getOrDefault("salePrice", "0"));

        String prompt = String.format(
            "POS 가격 데이터 검증:\n상품코드: %s\n정가: %s\n판매가: %s\n\n" +
            "이 데이터가 정상인지 이상(오류/이상값)인지 판단하고, 분류(NORMAL/ABNORMAL)와 이유를 2줄 이내로 제시하세요.",
            productCode, price, salePrice
        );

        String result = ollama.chat(prompt,
            "당신은 POS 데이터 품질 관리 AI입니다. 가격 데이터의 이상을 감지하세요.");

        String classification = result.toUpperCase().contains("ABNORMAL") ? "ABNORMAL" : "NORMAL";

        return ApiResponse.ok(Map.of(
            "classification", classification,
            "analysis", result,
            "productCode", productCode
        ));
    }

    /**
     * 일반 AI 채팅 — ESN 운영 관련 질문.
     */
    @PostMapping("/chat")
    public ApiResponse<Map<String, String>> chat(@RequestBody Map<String, String> body) {
        String message = body.getOrDefault("message", "");
        String result = ollama.chat(message, "ESL 전자 가격표 통합 관리 플랫폼 운영 전문가입니다.");
        return ApiResponse.ok(Map.of("response", result));
    }
}
