<?php
require_once __DIR__ . '/../includes/autoload.php';
require_once __DIR__ . '/../includes/functions.php';

// 获取请求的URL路径
$path = $_SERVER['REQUEST_URI'];
$path = parse_url($path, PHP_URL_PATH) ?? '';
$path = trim($path, '/');

// 移除基础URL路径（如果有）
$basePathRaw = parse_url(BASE_URL, PHP_URL_PATH) ?? '';
$basePath = trim($basePathRaw, '/');
if ($basePath && strpos($path, $basePath) === 0) {
    $path = substr($path, strlen($basePath));
}
$path = trim($path, '/');

// 路由分发
if ($path === '' || $path === 'index.php') {
    $controller = new HomeController();
    $controller->index();
} elseif ($path === 'user/check-in' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $controller = new UserController();
    $controller->checkIn();
} elseif ($path === 'user/recharge' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $controller = new UserController();
    $controller->recharge();
} elseif ($path === 'user/change-password' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $controller = new UserController();
    $controller->changePassword();
} elseif ($path === 'user/settings') {
    $controller = new UserController();
    $controller->settings();
} elseif ($path === 'user/update-email' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $controller = new UserController();
    $controller->updateEmail();
} elseif ($path === 'server/toggle-favorite' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $controller = new ServerController();
    $controller->toggleFavorite();
} elseif ($path === 'server/toggle-like' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $controller = new ServerController();
    $controller->toggleLike();
} elseif ($path === 'server/upload-image' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $controller = new ServerController();
    $controller->uploadImage();
} elseif (preg_match('#^server/get-status/(\d+)$#', $path, $matches)) {
    $controller = new ServerController();
    $controller->getStatus($matches[1]);
} elseif (preg_match('#^server/get-status-history/(\d+)$#', $path, $matches)) {
    $controller = new ServerController();
    $controller->getStatusHistory($matches[1]);
} elseif (preg_match('#^server/status$#', $path)) {
    $controller = new ServerController();
    $controller->status();
} elseif (preg_match('#^server/delete/(\d+)$#', $path, $matches)) {
    $controller = new ServerController();
    $controller->delete($matches[1]);
} elseif ($path === 'admin/approve-server' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $controller = new AdminController();
    $controller->approveServer();
} elseif ($path === 'admin/update-user-status' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $controller = new AdminController();
    $controller->updateUserStatus();
} elseif ($path === 'admin/delete-user' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $controller = new AdminController();
    $controller->deleteUser();
} elseif ($path === 'admin/edit-user' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $controller = new AdminController();
    $controller->editUser();
} elseif ($path === 'admin/settings') {
    $controller = new AdminController();
    $controller->settings();
} elseif ($path === 'admin/points') {
    $controller = new AdminController();
    $controller->points();
} elseif ($path === 'admin/generate-cards' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $controller = new AdminController();
    $controller->generateCards();
} elseif ($path === 'admin/delete-cards' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $controller = new AdminController();
    $controller->deleteCards();
} elseif ($path === 'admin/levels') {
    $controller = new AdminController();
    $controller->levels();
} elseif ($path === 'admin/add-level' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $controller = new AdminController();
    $controller->addLevel();
} elseif ($path === 'admin/edit-level' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $controller = new AdminController();
    $controller->editLevel();
} elseif ($path === 'admin/delete-level' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $controller = new AdminController();
    $controller->deleteLevel();
} elseif (preg_match('#^admin/server/edit/(\d+)$#', $path, $matches)) {
    $controller = new AdminController();
    $controller->editServer($matches[1]);
} elseif (preg_match('#^admin/server/delete/(\d+)$#', $path, $matches) && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $controller = new AdminController();
    $controller->deleteServer($matches[1]);
} elseif (preg_match('#^server/top/(\d+)$#', $path, $matches) && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $controller = new ServerController();
    $controller->top($matches[1]);
} else {
    // 解析路由
    $parts = explode('/', $path);
    $controllerName = ucfirst($parts[0]) . 'Controller';
    $action = isset($parts[1]) ? $parts[1] : 'index';
    $params = array_slice($parts, 2);
    
    // 检查控制器文件是否存在
    $controllerFile = __DIR__ . '/../controllers/' . $controllerName . '.php';
    if (file_exists($controllerFile)) {
        require_once $controllerFile;
        if (class_exists($controllerName)) {
            $controller = new $controllerName();
            if (method_exists($controller, $action)) {
                call_user_func_array([$controller, $action], $params);
            } else {
                require_once __DIR__ . '/../views/404.php';
            }
        } else {
            require_once __DIR__ . '/../views/404.php';
        }
    } else {
        require_once __DIR__ . '/../views/404.php';
    }
}