import { api } from "@/lib/api-client"; import type { Subject, Domain, Topic, LearningObjective, TaxonomyTree, PaginatedResponse, PaginationParams, ApiSuccessResponse } from "@/types"; export const taxonomyService = { async listSubjects(): Promise { const res = await api.get>("/subjects"); if (Array.isArray(res)) return res; const r = res as { data?: Subject[]; items?: Subject[]; subjects?: Subject[] }; return r.data ?? r.items ?? r.subjects ?? []; }, async getSubject(id: number): Promise { const res = await api.get<{ data: Subject } | Subject>(`/subjects/${id}`); const wrapped = res as { data?: Subject }; return (wrapped.data ?? (res as Subject)); }, async createSubject(data: Partial): Promise { return api.post("/subjects", data); }, async updateSubject(id: number, data: Partial): Promise { return api.patch(`/subjects/${id}`, data); }, async deleteSubject(id: number): Promise { return api.delete(`/subjects/${id}`); }, async getTaxonomyTree(subjectId: number): Promise { const res = await api.get<{ data: TaxonomyTree } | TaxonomyTree>(`/subjects/${subjectId}/taxonomy`); const wrapped = res as { data?: TaxonomyTree }; return (wrapped.data ?? (res as TaxonomyTree)); }, async importTaxonomy(subjectId: number, data: FormData): Promise { return api.upload(`/subjects/${subjectId}/taxonomy/import`, data); }, async listDomains(params?: { subject_id?: number }): Promise { const res = await api.get>("/domains", params as Record); if (Array.isArray(res)) return res; const r = res as { data?: Domain[]; items?: Domain[] }; return r.data ?? r.items ?? []; }, async createDomain(data: Partial): Promise { return api.post("/domains", data); }, async updateDomain(id: number, data: Partial): Promise { return api.patch(`/domains/${id}`, data); }, async deleteDomain(id: number): Promise { return api.delete(`/domains/${id}`); }, async aiSuggestTopics(domainId: number): Promise<{ suggestions: Partial[] }> { return api.post(`/domains/${domainId}/ai-suggest`); }, async listTopics(params?: { domain_id?: number; subject_id?: number }): Promise { const res = await api.get>("/topics", params as Record); if (Array.isArray(res)) return res; const r = res as { data?: Topic[]; items?: Topic[] }; return r.data ?? r.items ?? []; }, async createTopic(data: Partial): Promise { return api.post("/topics", data); }, async updateTopic(id: number, data: Partial): Promise { return api.patch(`/topics/${id}`, data); }, async deleteTopic(id: number): Promise { return api.delete(`/topics/${id}`); }, };