// AI 플랫폼(LLM Provider) 설정(ADMIN) + AI 피드백 API. [GUARDiA-ESN]
//   /api/admin/ai-config (ADMIN 전용) — API 키 값은 응답에 절대 포함되지 않음(claudeKeySet 플래그만).
//   /api/ai/feedback     (인증 사용자) — 👍/👎+교정 → 로컬 DuckDB + 중앙 guardia-rag 둘 다 기록.
//   레퍼런스: GUARDiA OCR frontend/src/api/adminAiConfig.ts (GLM provider·feedback 추가).
import api from './client'

/** LLM 제공자: ollama/qwen3/deepseek/glm(온프레미스) / claude(외부). */
export type AiProvider = 'ollama' | 'claude' | 'qwen3' | 'deepseek' | 'glm'

/** 화이트리스트 Claude 모델 ID. */
export type ClaudeModel = 'claude-sonnet-4-6' | 'claude-haiku-4-5' | 'claude-opus-4-8'

/** AI 설정 조회 DTO — API 키 값 미반환(claudeKeySet 으로 설정 여부만). */
export interface AiConfigDto {
  provider: AiProvider
  /** Ollama 텍스트 모델(provider 별 해석 결과, 읽기 전용 표시). */
  ollamaTextModel: string
  /** 선택된 Claude 모델 ID(미설정 시 서버 기본 claude-sonnet-4-6). */
  claudeModel: string
  /** 서버 환경변수 ANTHROPIC_API_KEY 존재 여부(값·길이·마스킹 일절 미포함). */
  claudeKeySet: boolean
  /** 전역 AI 사용 여부(off 시 규칙 기반 degraded). */
  aiEnabled: boolean
}

/** 저장 요청 — provider 필수, claudeModel/ollamaTextModel 선택. */
export interface AiConfigUpdateRequest {
  provider: AiProvider
  claudeModel?: ClaudeModel
  ollamaTextModel?: string
}

/** 연결 테스트 결과. */
export interface AiTestResult {
  ok: boolean
  degraded: boolean
  message: string
}

/** GET /api/admin/ai-config — 현재 AI 설정(API 키 값 제외). */
export const getAiConfig = () =>
  api.get('/api/admin/ai-config').then(r => r.data?.data as AiConfigDto)

/** PUT /api/admin/ai-config — provider/claudeModel 저장 → 반영분. */
export const updateAiConfig = (body: AiConfigUpdateRequest) =>
  api.put('/api/admin/ai-config', body).then(r => r.data?.data as AiConfigDto)

/** POST /api/admin/ai-config/test — 저장된 설정 기준 선택 provider 짧은 ping. */
export const testAiConfig = () =>
  api.post('/api/admin/ai-config/test', {}).then(r => r.data?.data as AiTestResult)

// ── AI 피드백(👍/👎+교정) ─────────────────────────────────────────────────
export interface AiFeedbackRequest {
  feature: string
  question?: string
  answer?: string
  verdict: 'up' | 'down'
  correction?: string
  answerId?: string
  tenantCode?: string
}

/** POST /api/ai/feedback — 로컬 DuckDB + 중앙 rag 기록(요약 결과만). */
export const submitAiFeedback = (body: AiFeedbackRequest) =>
  api.post('/api/ai/feedback', body).then(r => r.data?.data as { storedLocal: boolean; forwardedCentral: boolean })
