/**
 * 问题排查 API
 */
import http from '@/utils/http'
import { createSSE } from '@/utils/sse'
import type {
  TroubleshootRequest,
  TroubleshootResponse,
  SearchRequest,
  SearchResponse,
  AnalyzeRequest,
  AnalyzeResponse,
  HealthResponse,
  CacheStatsResponse,
  CacheClearResponse,
  ExportRequest,
  SubmitRequest,
  SubmitResponse,
  AnalyzeStreamEvent,
} from '@/types/troubleshoot'
import type { ProjectsResponse, CategoriesResponse } from '@/types/api'

/** 完整排查流程 */
export async function troubleshoot(data: TroubleshootRequest): Promise<TroubleshootResponse> {
  const res = await http.post<TroubleshootResponse>('/api/troubleshoot', data)
  return res.data
}

/** 搜索匹配案例 */
export async function search(data: SearchRequest): Promise<SearchResponse> {
  const res = await http.post<SearchResponse>('/api/search', data)
  return res.data
}

/** AI 深度分析 */
export async function analyze(data: AnalyzeRequest): Promise<AnalyzeResponse> {
  const res = await http.post<AnalyzeResponse>('/api/analyze', data)
  return res.data
}

/** 流式 AI 分析（SSE） */
export function analyzeStream(
  params: {
    project_name?: string
    system_type?: string
    apk_product?: string
    query: string
    model?: string
  },
  handlers: Record<string, (data: AnalyzeStreamEvent) => void>,
  onError?: (error: Event) => void
) {
  return createSSE({
    url: '/api/analyze/stream',
    params: params as Record<string, string>,
    handlers,
    onError,
  })
}

/** 健康检查 */
export async function health(): Promise<HealthResponse> {
  const res = await http.get<HealthResponse>('/api/health')
  return res.data
}

/** 获取项目列表 */
export async function getProjects(): Promise<ProjectsResponse> {
  const res = await http.get<ProjectsResponse>('/api/projects')
  return res.data
}

/** 获取分类列表 */
export async function getCategories(): Promise<CategoriesResponse> {
  const res = await http.get<CategoriesResponse>('/api/categories')
  return res.data
}

/** 获取缓存统计 */
export async function getCacheStats(): Promise<CacheStatsResponse> {
  const res = await http.get<CacheStatsResponse>('/api/cache/stats')
  return res.data
}

/** 清除缓存 */
export async function clearCache(): Promise<CacheClearResponse> {
  const res = await http.post<CacheClearResponse>('/api/cache/clear')
  return res.data
}

/** 导出 Word 报告 */
export async function exportReport(data: ExportRequest): Promise<Blob> {
  const res = await http.post('/api/export', data, {
    responseType: 'blob',
  })
  return res.data
}

/** 提交问题记录 */
export async function submitRecord(data: SubmitRequest): Promise<SubmitResponse> {
  const res = await http.post<SubmitResponse>('/api/submit', data)
  return res.data
}