import type { AnswerFeedbackVerdict, KnowledgeSearchResponse, KnowledgeSnippet, PositionSopSummary, SummaryCardResponse } from '@/types/api'; import { apiRequest } from './api'; import { getSelectedPosition } from './auth'; type RawKnowledgeSnippet = KnowledgeSnippet & { title?: string; text?: string; }; const normalizeSnippet = (snippet: RawKnowledgeSnippet): KnowledgeSnippet => ({ ...snippet, docTitle: snippet.docTitle || snippet.title || '', content: snippet.content || snippet.text || '' }); export const searchKnowledge = async (queryText: string, position = getSelectedPosition()) => { const response = await apiRequest({ url: '/api/knowledge/search', method: 'POST', data: { queryText, category: 'sop', position, limit: 5 }, timeout: 30000 }); return { ...response, snippets: (response.snippets || []).map((item) => normalizeSnippet(item as RawKnowledgeSnippet)) }; }; export const getPositionSopSummary = (position = getSelectedPosition()) => apiRequest({ url: `/api/knowledge/position-sop?position=${encodeURIComponent(position)}&projectType=住宅`, method: 'GET', timeout: 15000 }); export const submitAnswerFeedback = (params: { queryText: string; fragmentIds: number[]; verdict: AnswerFeedbackVerdict; reviewId?: number | null; }) => apiRequest<{ saved: number }>({ url: '/api/knowledge/answer-feedback', method: 'POST', data: { queryText: params.queryText, fragmentIds: params.fragmentIds, verdict: params.verdict, category: 'sop', position: getSelectedPosition(), source: 'mobile_uni_sop', reviewId: params.reviewId ?? null }, timeout: 15000 }); export const generateSummaryCard = (queryText: string) => apiRequest({ url: '/api/knowledge/summary-card', method: 'POST', data: { queryText, category: 'sop' }, timeout: 45000 });