use(\App\Middlewares\SecurityMiddleware::class); // 4. Define Web and API Routes // Main Platform Landing Page (Public High-Conversion Showcase) $router->get('/', function ($request, $response) { $response->html(\App\Views\LandingPage::render()); }); // Dedicated Institutional Proposal for Military Culture Directorate $router->get('/military-culture', function ($request, $response) { $response->html(\App\Views\MilitaryCulturePitch::render()); }); $router->get('/military', function ($request, $response) { $response->html(\App\Views\MilitaryCulturePitch::render()); }); // Dedicated Institutional Proposal for Vocational Training Corporation (VTC) $router->get('/vtc', function ($request, $response) { $response->html(\App\Views\VocationalTrainingPitch::render()); }); $router->get('/vocational', function ($request, $response) { $response->html(\App\Views\VocationalTrainingPitch::render()); }); // Web Portals (HTML + Native JavaScript) $router->get('/student', function ($request, $response) { $response->html(\App\Views\StudentPortal::render()); }); $router->get('/teacher', function ($request, $response) { $response->html(\App\Views\TeacherPortal::render()); }); $router->get('/guardian', function ($request, $response) { $response->html(\App\Views\GuardianPortal::render()); }); $router->get('/school-admin', function ($request, $response) { $response->html(\App\Views\SchoolAdminPortal::render()); }); $router->get('/curriculum-studio', function ($request, $response) { $response->html(\App\Views\CurriculumStudio::render()); }); // Real Ministry Curriculum PDF Ingestion & Live Tree API $curriculumManagerMiddleware = [\App\Middlewares\AuthMiddleware::class, \App\Middlewares\CurriculumManagerMiddleware::class]; $teacherMiddleware = [\App\Middlewares\AuthMiddleware::class, \App\Middlewares\TeacherRoleMiddleware::class]; $studentMiddleware = [\App\Middlewares\AuthMiddleware::class, \App\Middlewares\StudentRoleMiddleware::class]; $guardianMiddleware = [\App\Middlewares\AuthMiddleware::class, \App\Middlewares\GuardianRoleMiddleware::class]; $institutionalMiddleware = [\App\Middlewares\AuthMiddleware::class, \App\Middlewares\InstitutionalRoleMiddleware::class]; $superAdminMiddleware = [\App\Middlewares\AuthMiddleware::class, \App\Middlewares\SuperAdminRoleMiddleware::class]; $chatMiddleware = [\App\Middlewares\AuthMiddleware::class, \App\Middlewares\ChatRoleMiddleware::class]; $router->post('/api/curriculum/upload-pdf', [\App\Controllers\CurriculumController::class, 'uploadPdf'], $curriculumManagerMiddleware); $router->get('/api/curriculum/upload-status', [\App\Controllers\CurriculumController::class, 'getUploadStatus'], $curriculumManagerMiddleware); $router->get('/api/curriculum/upload-log', [\App\Controllers\CurriculumController::class, 'getUploadLog'], $curriculumManagerMiddleware); $router->get('/api/curriculum/tree', [\App\Controllers\CurriculumController::class, 'getTree']); $router->get('/api/curriculum/lesson', [\App\Controllers\CurriculumController::class, 'getLessonContent']); $router->post('/api/curriculum/save-lesson', [\App\Controllers\CurriculumController::class, 'saveLessonContent'], $curriculumManagerMiddleware); $router->post('/api/curriculum/generate-ai-assets', [\App\Controllers\CurriculumController::class, 'generateAiAssets'], $curriculumManagerMiddleware); $router->post('/api/curriculum/bake-lab', [\App\Controllers\CurriculumController::class, 'bakeInteractiveLab'], $curriculumManagerMiddleware); $router->post('/api/curriculum/generate-questions', [\App\Controllers\CurriculumController::class, 'generateQuestionBank'], $curriculumManagerMiddleware); $router->post('/api/curriculum/upload-video', [\App\Controllers\CurriculumController::class, 'uploadLessonVideo'], $curriculumManagerMiddleware); $router->get('/api/curriculum/search', function ($request, $response) { $q = $request->getQueryParams()['q'] ?? ''; $response->json([ 'status' => 'success', 'data' => \App\Services\CurriculumService::searchCurriculum($q) ]); }); $router->get('/api/curriculum/simulations', [\App\Controllers\CurriculumController::class, 'listSimulations']); $router->get('/api/curriculum/simulations/{subject}/{simName}', [\App\Controllers\CurriculumController::class, 'getSimulation']); $router->get('/api/curriculum/document', [\App\Controllers\CurriculumController::class, 'getDocumentContent']); // Health & Diagnostic Routes $router->get('/api/health', function ($request, $response) { $response->json([ 'status' => 'success', 'message' => 'Saqel API is healthy and fast (Pure PHP)', 'app_name' => getenv('APP_NAME') ?: 'Saqel', 'time' => date('Y-m-d H:i:s') ]); }); $router->get('/api/health/upload-limits', function ($request, $response) { $response->json([ 'status' => 'success', 'data' => [ 'php_sapi' => PHP_SAPI, 'post_max_size' => ini_get('post_max_size'), 'upload_max_filesize' => ini_get('upload_max_filesize'), 'memory_limit' => ini_get('memory_limit'), 'max_execution_time' => ini_get('max_execution_time'), ], ]); }); $router->get('/api/test/nabeh', [\App\Controllers\TestController::class, 'testNabeh'], $superAdminMiddleware); $router->get('/api/test/system', [\App\Controllers\TestController::class, 'testSystem'], $superAdminMiddleware); $router->get('/api/super-admin/overview', [\App\Controllers\SuperAdminController::class, 'overview'], $superAdminMiddleware); $router->get('/api/super-admin/payouts', [\App\Controllers\SuperAdminController::class, 'payouts'], $superAdminMiddleware); $router->get('/api/super-admin/ai-nodes', [\App\Controllers\SuperAdminController::class, 'aiNodes'], $superAdminMiddleware); $router->get('/api/super-admin/security-alerts', [\App\Controllers\SuperAdminController::class, 'securityAlerts'], $superAdminMiddleware); $router->get('/api/super-admin/schools', [\App\Controllers\SuperAdminController::class, 'schools'], $superAdminMiddleware); $router->post('/api/super-admin/schools/save', [\App\Controllers\SuperAdminController::class, 'saveSchool'], $superAdminMiddleware); $router->post('/api/super-admin/schools/toggle', [\App\Controllers\SuperAdminController::class, 'toggleSchool'], $superAdminMiddleware); $router->get('/api/super-admin/staff', [\App\Controllers\SuperAdminController::class, 'staff'], $superAdminMiddleware); $router->post('/api/super-admin/staff/save', [\App\Controllers\SuperAdminController::class, 'saveStaff'], $superAdminMiddleware); $router->post('/api/super-admin/staff/toggle', [\App\Controllers\SuperAdminController::class, 'toggleStaff'], $superAdminMiddleware); $router->get('/api/super-admin/directorates', [\App\Controllers\SuperAdminController::class, 'directorates'], $superAdminMiddleware); $router->post('/api/super-admin/directorates/save', [\App\Controllers\SuperAdminController::class, 'saveDirectorate'], $superAdminMiddleware); $router->post('/api/super-admin/directorates/toggle', [\App\Controllers\SuperAdminController::class, 'toggleDirectorate'], $superAdminMiddleware); // OTP Authentication Routes (WhatsApp via Nabeh Gateway + Device Fingerprinting) $router->post('/api/auth/otp/request', [\App\Controllers\AuthController::class, 'requestOtp'], [\App\Middlewares\RateLimitMiddleware::class]); $router->post('/api/auth/otp/verify', [\App\Controllers\AuthController::class, 'verifyOtp'], [\App\Middlewares\RateLimitMiddleware::class]); $router->post('/api/auth/logout', [\App\Controllers\AuthController::class, 'logout'], [\App\Middlewares\AuthMiddleware::class]); $router->get('/api/auth/me', [\App\Controllers\AuthController::class, 'me'], [\App\Middlewares\AuthMiddleware::class]); $router->post('/api/auth/student/login-national-id', [\App\Controllers\AuthController::class, 'verifyNationalId'], [\App\Middlewares\RateLimitMiddleware::class]); $router->get('/api/student/profile/status', [\App\Controllers\AuthController::class, 'studentProfileStatus'], [\App\Middlewares\AuthMiddleware::class]); $router->post('/api/student/profile/setup', [\App\Controllers\AuthController::class, 'studentProfileSetup'], [\App\Middlewares\RateLimitMiddleware::class]); // Guardian Routes (Authenticated) $router->get('/api/guardian/dashboard', [\App\Controllers\GuardianController::class, 'getDashboard'], $guardianMiddleware); $router->post('/api/guardian/children/link-requests', [\App\Controllers\GuardianController::class, 'requestChildLink'], $guardianMiddleware); $router->get('/api/student/guardian-link-requests', [\App\Controllers\GuardianController::class, 'pendingLinkRequests'], $studentMiddleware); $router->post('/api/student/guardian-link-requests/review', [\App\Controllers\GuardianController::class, 'reviewLinkRequest'], $studentMiddleware); // Teacher Studio Routes (Authenticated) $router->get('/api/teacher/profile/status', [\App\Controllers\TeacherController::class, 'profileStatus'], $teacherMiddleware); $router->post('/api/teacher/profile/setup', [\App\Controllers\TeacherController::class, 'setupProfile'], $teacherMiddleware); $router->get('/api/teacher/dashboard', [\App\Controllers\TeacherController::class, 'getDashboard'], $teacherMiddleware); $router->get('/api/teacher/courses', [\App\Controllers\TeacherController::class, 'getCourses'], $teacherMiddleware); $router->post('/api/teacher/courses', [\App\Controllers\TeacherController::class, 'addCourse'], $teacherMiddleware); $router->post('/api/teacher/lessons', [\App\Controllers\TeacherController::class, 'addLesson'], $teacherMiddleware); $router->post('/api/teacher/broadcast', [\App\Controllers\TeacherController::class, 'broadcastToClass'], $teacherMiddleware); // Dual Video Storage & Cloudflare R2 / HLS Stream Routes (API-Driven) $router->post('/api/teacher/videos/upload-direct', [\App\Controllers\VideoController::class, 'uploadDirect'], $teacherMiddleware); $router->post('/api/teacher/lessons/checkpoints', [\App\Controllers\VideoController::class, 'saveCheckpoint'], $teacherMiddleware); $router->get('/api/student/lessons', [\App\Controllers\VideoController::class, 'getStudentLessons'], [\App\Middlewares\AuthMiddleware::class]); $router->get('/api/videos/stream/{uuid}', [\App\Controllers\VideoController::class, 'streamLocalVideo'], [\App\Middlewares\AuthMiddleware::class]); $router->get('/api/videos/hls/{uuid}/{file}', [\App\Controllers\VideoController::class, 'streamHls'], [\App\Middlewares\AuthMiddleware::class]); $router->get('/api/lessons/playback', [\App\Controllers\VideoController::class, 'getPlaybackData'], [\App\Middlewares\AuthMiddleware::class]); $router->get('/api/lessons/{id}/playback', [\App\Controllers\VideoController::class, 'getPlaybackData'], [\App\Middlewares\AuthMiddleware::class]); // Student & Teacher Chat Routes (API-Driven, Authenticated) $router->get('/api/chat/conversations', [\App\Controllers\ChatController::class, 'getConversations'], $chatMiddleware); $router->get('/api/chat/messages', [\App\Controllers\ChatController::class, 'getMessages'], $chatMiddleware); $router->post('/api/chat/messages', [\App\Controllers\ChatController::class, 'sendMessage'], $chatMiddleware); $router->post('/api/chat/read', [\App\Controllers\ChatController::class, 'markAsRead'], $chatMiddleware); $router->get('/api/chat/unread-count', [\App\Controllers\ChatController::class, 'getUnreadCount'], $chatMiddleware); // Multi-Level Exams & AI Mastery Analytics Routes (API-Driven) $router->get('/api/exams', [\App\Controllers\ExamController::class, 'getExams'], $studentMiddleware); $router->get('/api/exams/{id}', [\App\Controllers\ExamController::class, 'getExamDetails'], $studentMiddleware); $router->post('/api/exams/{id}/submit', [\App\Controllers\ExamController::class, 'submitExam'], $studentMiddleware); $router->get('/api/student/progress/mastery', [\App\Controllers\ExamController::class, 'getMastery'], $studentMiddleware); $router->post('/api/student/lessons/{id}/progress', [\App\Controllers\VideoController::class, 'saveProgress'], $studentMiddleware); // Smart Error Notebook & Adaptive Remediation Routes (دفتر الأخطاء الذكي والمسارات العلاجية) $router->get('/api/student/error-notebook', [\App\Controllers\ErrorNotebookController::class, 'getErrorNotebook'], $studentMiddleware); $router->post('/api/student/error-notebook/log', [\App\Controllers\ErrorNotebookController::class, 'logError'], $studentMiddleware); $router->get('/api/student/error-notebook/remediation-quiz', [\App\Controllers\ErrorNotebookController::class, 'getRemediationQuiz'], $studentMiddleware); $router->post('/api/student/error-notebook/resolve', [\App\Controllers\ErrorNotebookController::class, 'resolveError'], $studentMiddleware); // Multi-Teacher Marketplace & Fair Reputation Routes (AI Telemetry + Anti-Brigade Defense) $router->get('/api/teachers', [\App\Controllers\TeacherController::class, 'getMarketplaceTeachers']); $router->get('/api/teachers/{id}/metrics', [\App\Controllers\TeacherController::class, 'getTeacherMetrics']); $router->post('/api/teachers/{id}/reviews', [\App\Controllers\TeacherController::class, 'submitReview'], [\App\Middlewares\AuthMiddleware::class]); $router->get('/api/teacher/reputation', [\App\Controllers\TeacherController::class, 'getMyReputation'], [\App\Middlewares\AuthMiddleware::class]); $router->get('/api/teacher/monetization', [\App\Controllers\TeacherController::class, 'getMonetizationDashboard'], $teacherMiddleware); $router->post('/api/teacher/audit-studio-video', [\App\Controllers\TeacherController::class, 'auditStudioVideo'], $teacherMiddleware); $router->get('/api/teacher/qna', [\App\Controllers\TeacherController::class, 'getQnA'], $teacherMiddleware); $router->get('/api/curriculum/interactive-lab', [\App\Controllers\CurriculumController::class, 'getInteractiveLab']); // Military Culture Directorate & School Principal/Supervisor Routes (Institutional Architecture) $router->get('/api/directorate/dashboard', [\App\Controllers\DirectorateSupervisorController::class, 'getDirectorateDashboard'], $institutionalMiddleware); $router->get('/api/supervisor/school-dashboard', [\App\Controllers\DirectorateSupervisorController::class, 'getSchoolDashboard'], $institutionalMiddleware); $router->post('/api/supervisor/record-lesson', [\App\Controllers\DirectorateSupervisorController::class, 'recordLesson'], $institutionalMiddleware); $router->post('/api/supervisor/exam/push-to-lab', [\App\Controllers\DirectorateSupervisorController::class, 'pushExamToLab'], $institutionalMiddleware); $router->post('/api/supervisor/exam/upload-panoramic', [\App\Controllers\DirectorateSupervisorController::class, 'uploadPanoramicSample'], $institutionalMiddleware); // Dual-Form Unified Exams & Statistical Anti-Cheating $router->get('/api/unified-exams/dual-forms', [\App\Controllers\DirectorateSupervisorController::class, 'generateDualForms'], $institutionalMiddleware); $router->post('/api/unified-exams/evaluate-integrity', [\App\Controllers\DirectorateSupervisorController::class, 'evaluateExamSessionIntegrity'], $institutionalMiddleware); // Automated Parent Reporting via WhatsApp / Nabeh Gateway $router->post('/api/parent-reports/dispatch', [\App\Controllers\DirectorateSupervisorController::class, 'dispatchParentReports'], $institutionalMiddleware); // School Roster Import & Encrypted National ID Engine (AES-256-GCM) $router->post('/api/school-roster/import', [\App\Controllers\DirectorateSupervisorController::class, 'importSchoolRoster'], $institutionalMiddleware); // CliQ Instant Payments (Siro Pattern) & Teacher Payout Queue $router->post('/api/payment/cliq/initiate', [\App\Controllers\CliqPaymentController::class, 'initiatePayment'], $studentMiddleware); $router->post('/api/payment/cliq/submit-receipt', [\App\Controllers\CliqPaymentController::class, 'submitReceipt'], $studentMiddleware); $router->post('/api/teacher/payout/request', [\App\Controllers\CliqPaymentController::class, 'requestTeacherPayout'], $teacherMiddleware); $router->get('/api/teacher/payout/status', [\App\Controllers\CliqPaymentController::class, 'getTeacherPayoutStatus'], $teacherMiddleware); $router->post('/api/admin/payout/process-queue', [\App\Controllers\CliqPaymentController::class, 'processPayoutQueue'], $superAdminMiddleware); // Curriculum Integrated Map (Vertical & Horizontal Synergy) $router->get('/api/curriculum/integrated-map', function ($request, $response) { $grade = $request->getQueryParams()['grade'] ?? 'grade_10'; $response->json(\App\Services\CurriculumIntegrationService::getIntegratedCurriculumMap($grade)); }); // Vocational Training Corporation (VTC) Modular CBT Curricula & Simulation Endpoints $router->get('/api/vocational/tree', [\App\Controllers\CurriculumController::class, 'getVocationalTree']); $router->get('/api/vocational/specialization', [\App\Controllers\CurriculumController::class, 'getVocationalSpecialization']); $router->get('/api/vocational/simulation', [\App\Controllers\CurriculumController::class, 'getVocationalSimulation']); // 5. Dispatch the request $router->dispatch($request, $response);