import { register } from '@/services/mock/registry' import { endpoints } from '@/services/api/endpoints' import { adminCourseTemplates, adminOfferedCourses } from '@/services/mock/fixtures/admin-courses' import { adminTerms } from '@/services/mock/fixtures/admin-terms' import { adminUsers } from '@/services/mock/fixtures/admin-users' import { filterDateRange, filterItems, findOrThrow, isoNow, makeId, paginate, removeById, updateById, } from '@/services/mock/helpers' register('GET', endpoints.getCourseTemplatesList, ({ query }) => { let list = filterItems(adminCourseTemplates, query, { title: 'includes', status: (item, v) => String(item.isActiveByDefault ? 1 : 0) === String(v), }) list = filterDateRange(list, query) return paginate(list, query) }) register('GET', endpoints.showCourseTemplate, ({ params }) => ({ data: findOrThrow(adminCourseTemplates, params.id), })) register('POST', endpoints.addNewCourseTemplate, ({ data }) => { const teacher = adminUsers.find((u) => u.id === Number(data.defaultTeacherId)) const item = { id: makeId(), title: data.title || '', description: data.description || '', image: data.imageId ? `https://picsum.photos/seed/course-${data.imageId}/200/200` : '', defaultTeacher: teacher ? { id: teacher.id, firstName: teacher.firstName, lastName: teacher.lastName, fullName: `${teacher.firstName} ${teacher.lastName}`, } : null, defaultCapacity: Number(data.defaultCapacity) || 0, isActiveByDefault: !!data.isActiveByDefault, prerequisitesCount: (data.prerequisites || []).length, prerequisites: (data.prerequisites || []).map((id) => ({ courseId: id, course: adminCourseTemplates.find((c) => c.id === Number(id)) || { id }, })), createdAt: isoNow(), } adminCourseTemplates.unshift(item) return { data: item } }) register('PUT', endpoints.updateCourseTemplate, ({ params, data }) => { const teacher = adminUsers.find((u) => u.id === Number(data.defaultTeacherId)) return { data: updateById(adminCourseTemplates, params.id, { title: data.title, description: data.description, image: data.imageId ? `https://picsum.photos/seed/course-${data.imageId}/200/200` : undefined, defaultTeacher: teacher ? { id: teacher.id, firstName: teacher.firstName, lastName: teacher.lastName, fullName: `${teacher.firstName} ${teacher.lastName}`, } : undefined, defaultCapacity: Number(data.defaultCapacity) || 0, isActiveByDefault: !!data.isActiveByDefault, prerequisites: (data.prerequisites || []).map((id) => ({ courseId: id, course: adminCourseTemplates.find((c) => c.id === Number(id)) || { id }, })), prerequisitesCount: (data.prerequisites || []).length, }), } }) register('DELETE', endpoints.deleteCourseTemplate, ({ params }) => { removeById(adminCourseTemplates, params.id) return { data: { message: 'حذف موفق' } } }) register('POST', endpoints.changeStatusCourseTemplate, ({ params, data }) => ({ data: updateById(adminCourseTemplates, params.id, { isActiveByDefault: !!data.isActiveByDefault, }), })) register('GET', endpoints.getCoursesList, ({ query }) => { let list = filterItems(adminOfferedCourses, query, { title: 'includes', termId: 'eq', status: (item, v) => String(item.isActive ? 1 : 0) === String(v), }) list = filterDateRange(list, query, 'startDate') return paginate(list, query) }) register('GET', endpoints.showCourse, ({ params }) => ({ data: findOrThrow(adminOfferedCourses, params.id), })) register('POST', endpoints.addNewCourse, ({ data }) => { const template = adminCourseTemplates.find((t) => t.id === Number(data.templateId)) const term = adminTerms.find((t) => t.id === Number(data.termId)) const teacher = adminUsers.find((u) => u.id === Number(data.teacherId)) const item = { id: makeId(), title: data.title || template?.title || '', image: data.imageId ? `https://picsum.photos/seed/offered-${data.imageId}/200/200` : '', template: template ? { id: template.id, title: template.title } : null, templateId: template?.id, term: term ? { id: term.id, title: term.title } : null, termId: term?.id, teacher: teacher ? { id: teacher.id, firstName: teacher.firstName, lastName: teacher.lastName, fullName: `${teacher.firstName} ${teacher.lastName}`, } : null, capacity: Number(data.capacity) || 0, isActive: !!data.isActive, prerequisitesCount: 0, startDate: term?.startDate || '', endDate: term?.endDate || '', createdAt: isoNow(), } adminOfferedCourses.unshift(item) return { data: item } }) register('PUT', endpoints.updateCourse, ({ params, data }) => { const template = adminCourseTemplates.find((t) => t.id === Number(data.templateId)) const term = adminTerms.find((t) => t.id === Number(data.termId)) return { data: updateById(adminOfferedCourses, params.id, { title: data.title, image: data.imageId ? `https://picsum.photos/seed/offered-${data.imageId}/200/200` : undefined, template: template ? { id: template.id, title: template.title } : undefined, templateId: template?.id, term: term ? { id: term.id, title: term.title } : undefined, termId: term?.id, capacity: Number(data.capacity) || 0, isActive: !!data.isActive, }), } }) register('DELETE', endpoints.deleteCourse, ({ params }) => { removeById(adminOfferedCourses, params.id) return { data: { message: 'حذف موفق' } } }) register('POST', endpoints.changeStatusCourse, ({ params, data }) => ({ data: updateById(adminOfferedCourses, params.id, { isActive: !!data.isActive }), }))