import apiClient from './client' import type { AISessionCreateRequest, AISessionCreateResponse, StepResponseRequest, StepResponseResponse, ResolveSessionRequest, EscalateSessionRequest, SessionCloseResponse, SessionDocumentation, AISessionSummary, AISessionDetail, AISessionSearchResult, SimilarSession, PickupSessionRequest, StatusUpdateRequest, StatusUpdateResponse, ChatSessionCreateResponse, ChatMessageRequest, ChatMessageResponse, } from '@/types/ai-session' export const aiSessionsApi = { async createSession(data: AISessionCreateRequest): Promise { const response = await apiClient.post('/ai-sessions', data) return response.data }, async createChatSession(data: AISessionCreateRequest): Promise { const response = await apiClient.post('/ai-sessions', { ...data, session_type: 'chat', }) return response.data }, async sendChatMessage(sessionId: string, data: ChatMessageRequest): Promise { const response = await apiClient.post( `/ai-sessions/${sessionId}/chat`, data ) return response.data }, async respondToStep(sessionId: string, data: StepResponseRequest): Promise { const response = await apiClient.post( `/ai-sessions/${sessionId}/respond`, data ) return response.data }, async resolveSession(sessionId: string, data: ResolveSessionRequest): Promise { const response = await apiClient.post( `/ai-sessions/${sessionId}/resolve`, data ) return response.data }, async escalateSession(sessionId: string, data: EscalateSessionRequest): Promise { const response = await apiClient.post( `/ai-sessions/${sessionId}/escalate`, data ) return response.data }, async listSessions(params?: { status?: string session_type?: string skip?: number limit?: number problem_domain?: string matched_flow_id?: string confidence_tier?: string ticket_id?: string date_from?: string date_to?: string q?: string }): Promise { // Strip empty string values so they aren't sent as empty query params const cleanParams = params ? Object.fromEntries(Object.entries(params).filter(([, v]) => v !== '' && v !== undefined)) : undefined const response = await apiClient.get('/ai-sessions', { params: cleanParams }) return response.data }, async getSession(sessionId: string): Promise { const response = await apiClient.get(`/ai-sessions/${sessionId}`) return response.data }, async getDocumentation(sessionId: string): Promise { const response = await apiClient.get( `/ai-sessions/${sessionId}/documentation` ) return response.data }, async rateSession(sessionId: string, data: { rating: number; feedback?: string }): Promise { await apiClient.post(`/ai-sessions/${sessionId}/rate`, data) }, async retryPsaPush(sessionId: string): Promise<{ psa_push_status: string; psa_push_error: string | null }> { const response = await apiClient.post<{ psa_push_status: string; psa_push_error: string | null }>( `/ai-sessions/${sessionId}/retry-psa-push` ) return response.data }, async pauseSession(sessionId: string): Promise { await apiClient.post(`/ai-sessions/${sessionId}/pause`) }, async resumeSession(sessionId: string): Promise { await apiClient.post(`/ai-sessions/${sessionId}/resume`) }, async abandonSession(sessionId: string, reason?: string): Promise { await apiClient.post(`/ai-sessions/${sessionId}/abandon`, null, { params: reason ? { reason } : undefined, }) }, async deleteSession(sessionId: string): Promise { await apiClient.delete(`/ai-sessions/${sessionId}`) }, async pickupSession(sessionId: string, data: PickupSessionRequest): Promise { const response = await apiClient.post( `/ai-sessions/${sessionId}/pickup`, data ) return response.data }, async linkTicket(sessionId: string, data: { psa_ticket_id: string; psa_connection_id: string }): Promise { const response = await apiClient.post( `/ai-sessions/${sessionId}/link-ticket`, data ) return response.data }, async getEscalationQueue(): Promise { const response = await apiClient.get('/ai-sessions/escalation-queue') return response.data }, async search(q: string, limit: number = 5): Promise { const response = await apiClient.get('/ai-sessions/search', { params: { q, limit }, }) return response.data }, async getSimilar(sessionId: string, limit: number = 5): Promise { const response = await apiClient.get(`/ai-sessions/${sessionId}/similar`, { params: { limit }, }) return response.data }, async generateStatusUpdate(sessionId: string, data: StatusUpdateRequest): Promise { const response = await apiClient.post( `/ai-sessions/${sessionId}/status-update`, data ) return response.data }, } export default aiSessionsApi