import { api } from "@/lib/api-client"; import type { Exam, ExamModule, Rubric, RubricGroup, ExamStructure, PaginatedResponse, PaginationParams, ApiSuccessResponse } from "@/types"; export interface ExamListParams extends PaginationParams { module?: ExamModule; subject_id?: number; entity_id?: number; } export const examsService = { async list(module: ExamModule, params?: PaginationParams): Promise> { return api.get>(`/exam/${module}`, params as Record); }, async getById(module: ExamModule, id: number): Promise { return api.get(`/exam/${module}/${id}`); }, async create(data: Partial): Promise { return api.post("/exam", data); }, async update(id: number, data: Partial): Promise { return api.patch(`/exam/${id}`, data); }, async delete(id: number): Promise { return api.delete(`/exam/${id}`); }, async setAccess(id: number, access: "public" | "private"): Promise { return api.patch(`/exam/${id}/access`, { access }); }, async listRubrics(params?: PaginationParams): Promise> { return api.get>("/rubrics", params as Record); }, async createRubric(data: Partial): Promise { return api.post("/rubrics", data); }, async updateRubric(id: number, data: Partial): Promise { return api.put(`/rubrics/${id}`, data); }, async deleteRubric(id: number): Promise { return api.delete(`/rubrics/${id}`); }, async listRubricGroups(params?: PaginationParams): Promise> { return api.get>("/rubric-groups", params as Record); }, async createRubricGroup(data: { name: string; rubric_ids: number[] }): Promise { return api.post("/rubric-groups", data); }, async updateRubricGroup(id: number, data: { name?: string; rubric_ids?: number[] }): Promise { return api.put(`/rubric-groups/${id}`, data); }, async deleteRubricGroup(id: number): Promise { return api.delete(`/rubric-groups/${id}`); }, async listStructures(params?: PaginationParams & { entity_id?: number }): Promise> { return api.get>("/exam-structures", params as Record); }, async createStructure(data: Partial): Promise { return api.post("/exam-structures", data); }, async updateStructure(id: number, data: Partial): Promise { return api.put(`/exam-structures/${id}`, data); }, async deleteStructure(id: number): Promise { return api.delete(`/exam-structures/${id}`); }, async suggestRubricCriteria(data: { name?: string; skill: string; exam_type: string; levels: string[]; }): Promise<{ criteria: string[]; suggested_levels?: string[] }> { return api.post("/ai/suggest-rubric-criteria", data); }, async getAvatars(): Promise<{ id: number; name: string; thumbnail: string }[]> { return api.get("/exam/avatars"); }, };