import { api } from "@/lib/api-client"; import type { InstExamSession, InstExam, ExamType, GradeConfig, ResultTemplate, Marksheet, CourseAssignment, AssignmentSubmission, AssignmentType, SubjectRegistration, InstExamSessionCreateRequest, InstExamCreateRequest, ExamTypeCreateRequest, GradeConfigCreateRequest, ResultTemplateCreateRequest, CourseAssignmentCreateRequest, AssignmentTypeCreateRequest, SubjectRegistrationCreateRequest, } from "@/types/institutional-exam"; import type { PaginatedResponse, PaginationParams, ApiSuccessResponse } from "@/types"; export const institutionalExamService = { async listSessions(params?: PaginationParams): Promise> { return api.get>("/inst-exam-sessions", params as Record); }, async getSession(id: number): Promise { return api.get(`/inst-exam-sessions/${id}`); }, async createSession(data: InstExamSessionCreateRequest): Promise { return api.post("/inst-exam-sessions", data); }, async updateSession(id: number, data: Partial): Promise { return api.patch(`/inst-exam-sessions/${id}`, data); }, async deleteSession(id: number): Promise { return api.delete(`/inst-exam-sessions/${id}`); }, async scheduleSession(id: number): Promise { return api.post(`/inst-exam-sessions/${id}/schedule`); }, async markSessionDone(id: number): Promise { return api.post(`/inst-exam-sessions/${id}/done`); }, async createExam(data: InstExamCreateRequest): Promise { return api.post("/inst-exams", data); }, async updateExam(id: number, data: Partial): Promise { return api.patch(`/inst-exams/${id}`, data); }, async addAttendees(examId: number, data: { student_ids: number[] }): Promise { return api.post(`/inst-exams/${examId}/attendees`, data); }, async enterMarks(examId: number, data: { marks: { student_id: number; score: number }[] }): Promise { return api.patch(`/inst-exams/${examId}/marks`, data); }, async listExamTypes(params?: PaginationParams): Promise> { return api.get>("/exam-types", params as Record); }, async createExamType(data: ExamTypeCreateRequest): Promise { return api.post("/exam-types", data); }, async listGradeConfigs(params?: PaginationParams): Promise> { return api.get>("/grade-config", params as Record); }, async createGradeConfig(data: GradeConfigCreateRequest): Promise { return api.post("/grade-config", data); }, async listResultTemplates(params?: PaginationParams): Promise> { return api.get>("/result-templates", params as Record); }, async createResultTemplate(data: ResultTemplateCreateRequest): Promise { return api.post("/result-templates", data); }, async generateMarksheets(templateId: number): Promise { return api.post(`/result-templates/${templateId}/generate`); }, async listMarksheets(params?: PaginationParams): Promise> { return api.get>("/marksheets", params as Record); }, async getMarksheet(id: number): Promise { return api.get(`/marksheets/${id}`); }, async validateMarksheet(id: number): Promise { return api.post(`/marksheets/${id}/validate`); }, async listCourseAssignments(params?: PaginationParams & { course_id?: number; batch_id?: number; state?: string }): Promise> { return api.get>("/course-assignments", params as Record); }, async createCourseAssignment(data: CourseAssignmentCreateRequest): Promise { return api.post("/course-assignments", data); }, async getCourseAssignment(id: number): Promise { return api.get(`/course-assignments/${id}`); }, async updateCourseAssignment(id: number, data: Partial): Promise { return api.patch(`/course-assignments/${id}`, data); }, async publishCourseAssignment(id: number): Promise { return api.post(`/course-assignments/${id}/publish`); }, async finishCourseAssignment(id: number): Promise { return api.post(`/course-assignments/${id}/finish`); }, async listSubmissions(assignmentId: number, params?: PaginationParams): Promise> { return api.get>(`/course-assignments/${assignmentId}/submissions`, params as Record); }, async submitAssignment(assignmentId: number, file: File): Promise { const formData = new FormData(); formData.append("file", file); return api.upload(`/course-assignments/${assignmentId}/submit`, formData); }, async gradeSubmission(submissionId: number, data: Partial): Promise { return api.patch(`/submissions/${submissionId}`, data); }, async listAssignmentTypes(params?: PaginationParams): Promise> { return api.get>("/assignment-types", params as Record); }, async createAssignmentType(data: AssignmentTypeCreateRequest): Promise { return api.post("/assignment-types", data); }, async listSubjectRegistrations(params?: PaginationParams & { student_id?: number; course_id?: number; state?: string }): Promise> { return api.get>("/subject-registrations", params as Record); }, async createSubjectRegistration(data: SubjectRegistrationCreateRequest): Promise { return api.post("/subject-registrations", data); }, async updateSubjectRegistration(id: number, data: Partial): Promise { return api.patch(`/subject-registrations/${id}`, data); }, async confirmSubjectRegistration(id: number): Promise { return api.post(`/subject-registrations/${id}/confirm`); }, async rejectSubjectRegistration(id: number): Promise { return api.post(`/subject-registrations/${id}/reject`); }, async getAvailableSubjects(params?: { student_id?: number; course_id?: number }): Promise { return api.get("/subject-registrations/available", params as Record); }, };