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()); }); // 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 $router->post('/api/curriculum/upload-pdf', [\App\Controllers\CurriculumController::class, 'uploadPdf']); $router->get('/api/curriculum/upload-status', [\App\Controllers\CurriculumController::class, 'getUploadStatus']); $router->get('/api/curriculum/upload-log', [\App\Controllers\CurriculumController::class, 'getUploadLog']); $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']); $router->get('/api/curriculum/search', function ($request, $response) { $q = $request->getQueryParams()['q'] ?? ''; $response->json([ 'status' => 'success', 'data' => \App\Services\CurriculumService::searchCurriculum($q) ]); }); // 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/test/nabeh', [\App\Controllers\TestController::class, 'testNabeh']); $router->get('/api/test/system', [\App\Controllers\TestController::class, 'testSystem']); // 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->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\AuthMiddleware::class]); // Legacy / Direct Auth $router->post('/api/auth/register', [\App\Controllers\AuthController::class, 'register'], [\App\Middlewares\RateLimitMiddleware::class]); $router->post('/api/auth/login', [\App\Controllers\AuthController::class, 'login'], [\App\Middlewares\RateLimitMiddleware::class]); // Teacher Studio Routes (Authenticated) $router->get('/api/teacher/profile/status', [\App\Controllers\TeacherController::class, 'profileStatus'], [\App\Middlewares\AuthMiddleware::class]); $router->post('/api/teacher/profile/setup', [\App\Controllers\TeacherController::class, 'setupProfile'], [\App\Middlewares\AuthMiddleware::class]); $router->get('/api/teacher/dashboard', [\App\Controllers\TeacherController::class, 'getDashboard'], [\App\Middlewares\AuthMiddleware::class]); $router->get('/api/teacher/courses', [\App\Controllers\TeacherController::class, 'getCourses'], [\App\Middlewares\AuthMiddleware::class]); $router->post('/api/teacher/courses', [\App\Controllers\TeacherController::class, 'addCourse'], [\App\Middlewares\AuthMiddleware::class]); $router->post('/api/teacher/lessons', [\App\Controllers\TeacherController::class, 'addLesson'], [\App\Middlewares\AuthMiddleware::class]); // Dual Video Storage & Cloudflare R2 / HLS Stream Routes (API-Driven) $router->post('/api/teacher/videos/upload-direct', [\App\Controllers\VideoController::class, 'uploadDirect'], [\App\Middlewares\AuthMiddleware::class]); $router->post('/api/teacher/lessons/checkpoints', [\App\Controllers\VideoController::class, 'saveCheckpoint'], [\App\Middlewares\AuthMiddleware::class]); $router->get('/api/student/lessons', [\App\Controllers\VideoController::class, 'getStudentLessons']); $router->get('/api/videos/stream/{uuid}', [\App\Controllers\VideoController::class, 'streamLocalVideo']); $router->get('/api/videos/hls/{uuid}/{file}', [\App\Controllers\VideoController::class, 'streamHls']); $router->get('/api/lessons/{id}/playback', [\App\Controllers\VideoController::class, 'getPlaybackData']); // Student & Teacher Chat Routes (API-Driven, Authenticated) $router->get('/api/chat/conversations', [\App\Controllers\ChatController::class, 'getConversations'], [\App\Middlewares\AuthMiddleware::class]); $router->get('/api/chat/messages', [\App\Controllers\ChatController::class, 'getMessages'], [\App\Middlewares\AuthMiddleware::class]); $router->post('/api/chat/messages', [\App\Controllers\ChatController::class, 'sendMessage'], [\App\Middlewares\AuthMiddleware::class]); $router->post('/api/chat/read', [\App\Controllers\ChatController::class, 'markAsRead'], [\App\Middlewares\AuthMiddleware::class]); $router->get('/api/chat/unread-count', [\App\Controllers\ChatController::class, 'getUnreadCount'], [\App\Middlewares\AuthMiddleware::class]); // Multi-Level Exams & AI Mastery Analytics Routes (API-Driven) $router->get('/api/exams', [\App\Controllers\ExamController::class, 'getExams'], [\App\Middlewares\AuthMiddleware::class]); $router->get('/api/exams/{id}', [\App\Controllers\ExamController::class, 'getExamDetails'], [\App\Middlewares\AuthMiddleware::class]); $router->post('/api/exams/{id}/submit', [\App\Controllers\ExamController::class, 'submitExam'], [\App\Middlewares\AuthMiddleware::class]); $router->get('/api/student/progress/mastery', [\App\Controllers\ExamController::class, 'getMastery'], [\App\Middlewares\AuthMiddleware::class]); // 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]); // 5. Dispatch the request $router->dispatch($request, $response);