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<{ data: Subject[] } | Subject[]>("/subjects"); return Array.isArray(res) ? res : (res as { data: Subject[] }).data ?? []; }, async getSubject(id: number): Promise { const res = await api.get<{ data: Subject } | Subject>(`/subjects/${id}`); return (res as { data: Subject }).data ?? res; }, 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`); return (res as { data: TaxonomyTree }).data ?? res; }, 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<{ data: Domain[] } | Domain[]>("/domains", params as Record); return Array.isArray(res) ? res : (res as { data: Domain[] }).data ?? []; }, 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<{ data: Topic[] } | Topic[]>("/topics", params as Record); return Array.isArray(res) ? res : (res as { data: Topic[] }).data ?? []; }, 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}`); }, };