<?php
declare(strict_types=1);

// Read-only CLI preflight. Ne pristupa bazi ni Microsoft endpointima i ne ispisuje tajne.
if (PHP_SAPI !== 'cli') {
    http_response_code(404);
    exit;
}

$failures = 0;
function production_check(bool $ok, string $message): void
{
    global $failures;
    echo ($ok ? 'PASS: ' : 'FAIL: ') . $message . PHP_EOL;
    if (!$ok) {
        $failures++;
    }
}

production_check(PHP_VERSION_ID >= 80000, 'PHP >= 8.0 (na hostingu koristiti podrzanu verziju).');
foreach (['curl', 'json', 'mbstring', 'pdo_mysql', 'fileinfo', 'dom', 'openssl', 'gd'] as $extension) {
    production_check(extension_loaded($extension), 'PHP extension: ' . $extension);
}
production_check(class_exists('ZipArchive') || class_exists('PharData'), 'ZIP/XLSX podrska.');

if (!is_file(__DIR__ . '/config.php')) {
    production_check(false, 'Nedostaje lokalni config.php.');
    exit(1);
}
require_once __DIR__ . '/config.php';
require_once __DIR__ . '/app/functions.php';
require_once __DIR__ . '/app/request.php';
require_once __DIR__ . '/app/entra.php';

$productionOrigin = 'https://infrastruktura.sos-decijasela.rs';
$config = entra_config();
production_check($config['redirect_uri'] === $productionOrigin . '/auth/entra/callback', 'Efektivni ENTRA_REDIRECT_URI tacno odgovara produkcijskom callback-u.');
production_check(entra_configuration_error() === null, 'Entra client/tenant ID, client secret i HTTPS callback su konfigurisani.');
production_check(entra_library_is_available(), 'Composer OIDC biblioteka je dostupna.');
production_check(entra_application_url('dashboard.php') === $productionOrigin . '/dashboard.php', 'Povratak posle prijave ostaje na produkciji.');
production_check(!defined('USE_ABSOLUTE_BASE_URL') || USE_ABSOLUTE_BASE_URL === false, 'Postojeci relativni frontend/API URL rezim.');
production_check(!defined('BASE_URL') || in_array((string)BASE_URL, ['', '/', 'auto'], true), 'BASE_URL odgovara instalaciji u root-u domena.');
production_check(defined('APP_FORCE_SECURE_COOKIE') && APP_FORCE_SECURE_COOKIE === true, 'Secure session cookie je obavezan.');
production_check(!defined('ALLOW_PUBLIC_REGISTRATION') || ALLOW_PUBLIC_REGISTRATION === false, 'Javna registracija je iskljucena.');

$databaseConfigured = true;
foreach (['DB_HOST', 'DB_NAME', 'DB_USER', 'DB_PASS'] as $name) {
    $databaseConfigured = $databaseConfigured && defined($name) && (string)constant($name) !== '';
}
production_check($databaseConfigured, 'DB konfiguracija postoji; vrednosti nisu ispisane.');
$databaseTarget = (defined('DB_NAME') ? (string)DB_NAME : '') . ' ' . (defined('DB_USER') ? (string)DB_USER : '');
production_check(!preg_match('/stag(?:e|ing)|infratest|cpaneluser|change_this/i', $databaseTarget), 'DB naziv i korisnik nemaju staging/test/primer oznake; administrator mora potvrditi stvarnu ciljnu bazu.');
production_check(!defined('DB_PASS') || (string)DB_PASS !== 'change_this_password', 'DB lozinka nije primer iz sablona.');

echo 'INFO: CLI i web PHP mogu imati razlicit environment, HOME, php.ini i ekstenzije.' . PHP_EOL;
echo 'INFO: DNS, TLS, HTTP->HTTPS, Apache rewrite/headers, Entra portal, baza i korisnicki tokovi zahtevaju zasebnu proveru na produkciji.' . PHP_EOL;
exit($failures > 0 ? 1 : 0);
