<?php

// When running with PHP's built-in server using this file as router,
// let existing static files (CSS/JS/images) be served directly.
if (PHP_SAPI === 'cli-server') {
    $path = parse_url($_SERVER['REQUEST_URI'] ?? '', PHP_URL_PATH);
    $fullPath = realpath(__DIR__ . $path);
    if ($fullPath && str_starts_with($fullPath, realpath(__DIR__ . '/')) && is_file($fullPath)) {
        return false; // serve the static asset as-is
    }
}

require __DIR__ . '/../config/bootstrap.php';

use App\Controllers\AuthController;
use App\Controllers\ContactController;
use App\Controllers\InfoController;
use App\Controllers\LanguageController;
use App\Controllers\MediaController;
use App\Controllers\FileController;
use App\Controllers\ProfileController;
use App\Controllers\RegistrationController;
use App\Controllers\SearchController;
use App\Controllers\UserController;
use App\Controllers\PostController;
use App\Core\Router;

$router = new Router();

// Trate HEAD como GET para não devolver 404 em health checks simples
if (($_SERVER['REQUEST_METHOD'] ?? '') === 'HEAD') {
    $_SERVER['REQUEST_METHOD'] = 'GET';
}

// Public routes
$router->get('/', [AuthController::class, 'login']);
$router->post('/login', [AuthController::class, 'doLogin']);
$router->post('/forgot-password', [AuthController::class, 'forgotPassword']);
$router->get('/reset', [AuthController::class, 'resetForm']);
$router->post('/reset', [AuthController::class, 'resetPassword']);
$router->get('/photo/{id}', [MediaController::class, 'photo']);
$router->get('/file/photo/{hash}', [FileController::class, 'photo']);
$router->get('/file/post/{name}', [FileController::class, 'post']);
$router->get('/file/temp/{name}', [FileController::class, 'temp']);
$router->post('/register/check', [RegistrationController::class, 'checkInviteEmail']);
$router->get('/register', [RegistrationController::class, 'index']);
$router->post('/register/verify', [RegistrationController::class, 'verifyInvite']);
$router->post('/register/step3', [RegistrationController::class, 'stageThree']);
$router->post('/register/document', [RegistrationController::class, 'document']);
$router->post('/register/submit', [RegistrationController::class, 'submit']);
$router->post('/contact', [ContactController::class, 'submit']);
$router->post('/admin/score-config', [\App\Controllers\AdminController::class, 'updateScoreWeights']);
$router->post('/admin/score-daily', [\App\Controllers\AdminController::class, 'runDailyScores']);
$router->get('/admin/items-assigned', [\App\Controllers\AdminController::class, 'itemsAssigned']);
$router->get('/admin/user-info', [\App\Controllers\AdminController::class, 'userInfo']);
$router->post('/admin/photo-block', [\App\Controllers\AdminController::class, 'photoBlock']);
$router->post('/admin/block', [\App\Controllers\AdminController::class, 'blockUser']);
$router->post('/admin/admin-add', [\App\Controllers\AdminController::class, 'addAdmin']);
$router->post('/admin/admin-remove', [\App\Controllers\AdminController::class, 'removeAdmin']);
$router->post('/admin/unlock', [\App\Controllers\AdminController::class, 'unlockUser']);
$router->post('/admin/delete-user', [\App\Controllers\AdminController::class, 'deleteUser']);
$router->post('/admin/delete-invite', [\App\Controllers\AdminController::class, 'deleteInvite']);
$router->post('/admin/nudge', [\App\Controllers\AdminController::class, 'nudgeUser']);
$router->post('/admin/mail-accounts', [\App\Controllers\AdminController::class, 'updateMailAccounts']);
$router->get('/about', [InfoController::class, 'about']);
$router->get('/metodologia', [InfoController::class, 'methodology']);
$router->get('/faq', [InfoController::class, 'faq']);
$router->get('/termos', [InfoController::class, 'terms']);
$router->get('/privacidade', [InfoController::class, 'privacy']);
$router->get('/codigo-de-conduta', [InfoController::class, 'conduct']);
$router->get('/lang', [LanguageController::class, 'set']);
$router->post('/lang', [LanguageController::class, 'set']);

// Authenticated routes (guarding will be added later)
$router->get('/profile', [ProfileController::class, 'index']);
$router->get('/profile/edit', [ProfileController::class, 'edit']);
$router->post('/profile/edit', [ProfileController::class, 'update']);
$router->get('/profile/change-password', [ProfileController::class, 'changePassword']);
$router->post('/profile/change-password', [ProfileController::class, 'changePasswordPost']);
$router->post('/profile/reveal-score', [ProfileController::class, 'revealScore']);
$router->post('/profile/suggestion', [ProfileController::class, 'suggestionAction']);
$router->post('/profile/cancel', [ProfileController::class, 'cancel']);
$router->get('/invites', [ProfileController::class, 'invites']);
$router->post('/invites/send', [ProfileController::class, 'sendInvite']);
$router->post('/invites/notify', [ProfileController::class, 'updateInviteNotify']);
$router->get('/messages', [ProfileController::class, 'messages']);
$router->post('/messages/send', [ProfileController::class, 'sendMessage']);
$router->post('/messages/delete', [ProfileController::class, 'deleteMessage']);
$router->get('/inventory/{item}', [ProfileController::class, 'inventory']);
$router->post('/inventory/{item}/remove', [ProfileController::class, 'inventoryRemove']);
$router->get('/search', [SearchController::class, 'index']);
$router->get('/user/{publicId}', [UserController::class, 'show']);
$router->post('/user/{publicId}/evaluate', [UserController::class, 'evaluate']);
$router->post('/user/{publicId}/report', [UserController::class, 'report']);
$router->post('/user/{publicId}/score', [UserController::class, 'revealScore']);
$router->get('/logout', [AuthController::class, 'logout']);
$router->post('/logout', [AuthController::class, 'logout']);
$router->get('/photo-review', [AuthController::class, 'photoReview']);
$router->post('/photo-review', [AuthController::class, 'photoReviewSubmit']);

// Posts / Feed
$router->post('/posts', [PostController::class, 'create']);
$router->post('/posts/like', [PostController::class, 'like']);
$router->post('/posts/comment', [PostController::class, 'comment']);
$router->post('/posts/comment/like', [PostController::class, 'likeComment']);
$router->post('/posts/delete', [PostController::class, 'delete']);
$router->post('/posts/mute', [PostController::class, 'mute']);
$router->post('/posts/unmute', [PostController::class, 'unmute']);
$router->post('/posts/report', [PostController::class, 'report']);

// Admin
$router->get('/admin', [\App\Controllers\AdminController::class, 'dashboard']);
$router->get('/admin/items-assigned', [\App\Controllers\AdminController::class, 'itemsAssigned']);
$router->get('/admin/evaluations', [\App\Controllers\AdminController::class, 'evaluationsAssigned']);

$router->dispatch($_SERVER['REQUEST_METHOD'], $_SERVER['REQUEST_URI']);
