<?php

/**
 * 应用入口文件
 */

// 定义应用开始时间
define('APP_START', microtime(true));

file_put_contents(__DIR__ . '/../debug_index.log', date('[Y-m-d H:i:s] ') . "Index hit: " . ($_SERVER['REQUEST_URI'] ?? 'unknown') . PHP_EOL, FILE_APPEND);

// 设置时区
date_default_timezone_set('Asia/Shanghai');

// 错误报告设置
// 错误报告设置
error_reporting(E_ALL);
ini_set('display_errors', '1'); // 临时开启错误显示以排查500问题

// 尽早添加CORS头，确保所有响应都有CORS头（包括错误响应）
header('Access-Control-Allow-Origin: *');
header('Access-Control-Allow-Methods: GET, POST, PUT, DELETE, OPTIONS');
header('Access-Control-Allow-Headers: Content-Type, Authorization, X-Request-ID, X-Requested-With');

// 处理OPTIONS预检请求
if ($_SERVER['REQUEST_METHOD'] === 'OPTIONS') {
    header('Access-Control-Max-Age: 86400');
    http_response_code(200);
    exit;
}

// 加载Composer自动加载
require_once __DIR__ . '/../vendor/autoload.php';

// 加载辅助函数
require_once __DIR__ . '/../core/helpers.php';

// 加载配置文件
require_once __DIR__ . '/../core/Config.php';
require_once __DIR__ . '/../core/Database.php';
require_once __DIR__ . '/../core/Logger.php';
require_once __DIR__ . '/../core/Response.php';
require_once __DIR__ . '/../core/JWT.php';
require_once __DIR__ . '/../core/Router.php';
require_once __DIR__ . '/../core/Middleware.php';

// 加载应用类
require_once __DIR__ . '/../app/Controllers/Controller.php';
require_once __DIR__ . '/../app/Models/Model.php';
require_once __DIR__ . '/../app/Middleware/AuthMiddleware.php';
require_once __DIR__ . '/../app/Controllers/AuthController.php';
require_once __DIR__ . '/../app/Controllers/SystemController.php';
require_once __DIR__ . '/../app/Controllers/StatisticsController.php';
require_once __DIR__ . '/../app/Controllers/UserController.php';
require_once __DIR__ . '/../app/Controllers/RoleController.php';
require_once __DIR__ . '/../app/Controllers/PermissionController.php';
require_once __DIR__ . '/../app/Controllers/StoreController.php';
require_once __DIR__ . '/../app/Controllers/RedStarController.php';
require_once __DIR__ . '/../app/Controllers/PromotionController.php';
require_once __DIR__ . '/../app/Controllers/ExchangeController.php';
require_once __DIR__ . '/../app/Controllers/EmployeeController.php';
require_once __DIR__ . '/../app/Controllers/PositionController.php';
require_once __DIR__ . '/../app/Controllers/ContractController.php';
require_once __DIR__ . '/../app/Controllers/ContractTemplateController.php';
require_once __DIR__ . '/../app/Controllers/AuctionController.php';
require_once __DIR__ . '/../app/Controllers/MallController.php';
require_once __DIR__ . '/../app/Controllers/MallCategoryController.php';
require_once __DIR__ . '/../app/Controllers/OrgController.php';
require_once __DIR__ . '/../app/Controllers/StarController.php';
require_once __DIR__ . '/../app/Controllers/MobileController.php';
require_once __DIR__ . '/../app/Controllers/StarTransferController.php';
require_once __DIR__ . '/../app/Controllers/ContractSubjectController.php';
require_once __DIR__ . '/../app/Controllers/ContractTemplateController.php';
require_once __DIR__ . '/../app/Controllers/SystemConfigController.php';
require_once __DIR__ . '/../app/Controllers/AnnouncementController.php';
require_once __DIR__ . '/../app/Controllers/NotificationController.php';
require_once __DIR__ . '/../app/Controllers/TaskController.php';
require_once __DIR__ . '/../app/Controllers/ExportController.php';
require_once __DIR__ . '/../app/Controllers/CourseController.php';
require_once __DIR__ . '/../app/Controllers/ExamController.php';

// 加载模型类
require_once __DIR__ . '/../app/Models/UserModel.php';
require_once __DIR__ . '/../app/Models/EmployeeModel.php';
require_once __DIR__ . '/../app/Models/OrgUnitModel.php';
require_once __DIR__ . '/../app/Models/PositionModel.php';
require_once __DIR__ . '/../app/Models/RoleModel.php';
require_once __DIR__ . '/../app/Models/PermissionModel.php';
require_once __DIR__ . '/../app/Models/RedStarRecordModel.php';
require_once __DIR__ . '/../app/Models/ConfigModel.php';
require_once __DIR__ . '/../app/Models/WithdrawRequestModel.php';

// 加载路由
file_put_contents(__DIR__ . '/../debug_index.log', date('[Y-m-d H:i:s] ') . "Loading routes...\n", FILE_APPEND);
require_once __DIR__ . '/../routes/api.php';

// 初始化JWT配置
file_put_contents(__DIR__ . '/../debug_index.log', date('[Y-m-d H:i:s] ') . "JWT init...\n", FILE_APPEND);
\Core\JWT::init();

// 处理OPTIONS预检请求
\Core\Response::handleOptions();

// 设置请求ID
$requestId = uniqid();
if (!isset($_SERVER['HTTP_X_REQUEST_ID'])) {
    $_SERVER['HTTP_X_REQUEST_ID'] = $requestId;
}

// 记录请求开始
file_put_contents(__DIR__ . '/../debug_index.log', date('[Y-m-d H:i:s] ') . "Logger debug...\n", FILE_APPEND);
\Core\Logger::debug('请求开始', [
    'request_id' => $requestId,
    'method' => $_SERVER['REQUEST_METHOD'],
    'uri' => $_SERVER['REQUEST_URI'],
    'ip' => $_SERVER['REMOTE_ADDR'] ?? 'unknown'
]);

// 分发路由
file_put_contents(__DIR__ . '/../debug_index.log', date('[Y-m-d H:i:s] ') . "Dispatching...\n", FILE_APPEND);
\Core\Router::dispatch();
