<?php

/**
 * index.php (BẢN DEPLOY cho DirectAdmin) — đặt trong public_html/.
 *
 * public_html là document root cố định của DirectAdmin. Ta CHỈ để index.php +
 * .htaccess ở đây; toàn bộ mã nguồn (src, config, .env, storage...) nên nằm ở
 * thư mục "app/" NGANG HÀNG public_html để không truy cập được qua web.
 *
 * File này TỰ DÒ vị trí bootstrap ở nhiều bố cục thường gặp, nên chạy được dù
 * anh đặt mã nguồn ở "app/" (khuyến nghị) hay upload cả project vào public_html.
 */

declare(strict_types=1);

// Yêu cầu PHP >= 8.1 (framework dùng readonly, match, enum, attribute...).
if (PHP_VERSION_ID < 80100) {
    http_response_code(500);
    header('Content-Type: text/html; charset=UTF-8');
    echo '<h1>Sai phiên bản PHP</h1>';
    echo '<p>Đang chạy PHP ' . PHP_VERSION . ', cần <b>PHP 8.1 trở lên</b>.</p>';
    echo '<p>Trong DirectAdmin: mở <b>Select PHP Version</b> của domain và chọn 8.1/8.2/8.3.</p>';
    exit;
}

// Các vị trí bootstrap có thể có (ưu tiên bố cục khuyến nghị: app/ ngang public_html).
$candidates = [
    dirname(__DIR__) . '/app/src/bootstrap.php',          // app/ ngang public_html (khuyến nghị)
    __DIR__ . '/src/bootstrap.php',                        // upload cả project vào public_html
    dirname(__DIR__) . '/src/bootstrap.php',               // public_html là thư mục public/ con của project
    dirname(__DIR__) . '/private_html/src/bootstrap.php',  // để mã nguồn trong private_html
];

$bootstrap = null;
foreach ($candidates as $path) {
    if (is_file($path)) {
        $bootstrap = $path;
        break;
    }
}

if ($bootstrap === null) {
    http_response_code(500);
    header('Content-Type: text/html; charset=UTF-8');
    echo '<h1>Không tìm thấy mã nguồn</h1>';
    echo '<p>index.php không tìm thấy <code>src/bootstrap.php</code> ở các vị trí:</p><ul>';
    foreach ($candidates as $path) {
        echo '<li><code>' . htmlspecialchars($path, ENT_QUOTES) . '</code></li>';
    }
    echo '</ul><p>Hãy đặt thư mục mã nguồn tên <b>app</b> ngang hàng với public_html '
        . '(xem deploy/DEPLOY-DIRECTADMIN.md).</p>';
    exit;
}

require $bootstrap;

$app = new \App\Core\Application();
$response = $app->handle(\App\Core\Http\Request::capture());
$response->send();
