<?php
declare(strict_types=1);

require_once __DIR__ . '/Helpers.php';
$config = require dirname(__DIR__) . '/config.php';
date_default_timezone_set($config['app']['timezone'] ?? 'Europe/Istanbul');

if (session_status() !== PHP_SESSION_ACTIVE) {
    $sessionDir = dirname(__DIR__) . '/storage/sessions';
    if (!is_dir($sessionDir)) {
        @mkdir($sessionDir, 0755, true);
    }

    if (is_dir($sessionDir) && is_writable($sessionDir)) {
        session_save_path($sessionDir);
    }

    ini_set('session.use_only_cookies', '1');
    ini_set('session.use_strict_mode', '1');

    $secure = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off')
        || ($_SERVER['HTTP_X_FORWARDED_PROTO'] ?? '') === 'https';

    session_set_cookie_params([
        'lifetime' => 0,
        'path' => '/',
        'secure' => $secure,
        'httponly' => true,
        'samesite' => 'Lax',
    ]);
    session_name('NEKRUTSESSID');

    if (!session_start()) {
        http_response_code(500);
        exit('Oturum başlatılamadı. storage/sessions klasörünün iznini 755 veya 775 yapın.');
    }

    // Bazı paylaşımlı hostinglerde PHP session çöp toplama kapalıdır.
    // Düşük olasılıklı temizlik, binlerce eski session dosyasının birikmesini önler.
    if (is_dir($sessionDir) && random_int(1, 100) === 1) {
        $cutoff = time() - 86400;
        foreach (glob($sessionDir . '/sess_*') ?: [] as $sessionFile) {
            if (is_file($sessionFile) && filemtime($sessionFile) < $cutoff) @unlink($sessionFile);
        }
    }
}

ini_set('display_errors', !empty($config['app']['debug']) ? '1' : '0');
error_reporting(E_ALL);

require_once __DIR__ . '/Database.php';
require_once __DIR__ . '/Security.php';
require_once __DIR__ . '/Auth.php';
require_once __DIR__ . '/Seo.php';
require_once __DIR__ . '/Booking.php';
require_once __DIR__ . '/Gemini.php';

ensure_site_default_settings();

$requestPathForRobots = current_path();
if (str_starts_with($requestPathForRobots, '/admin/')
    || str_starts_with($requestPathForRobots, '/api/')
    || str_starts_with($requestPathForRobots, '/rezervasyon/basarili/')
    || str_starts_with($requestPathForRobots, '/rezervasyon/yonet/')) {
    header('X-Robots-Tag: noindex, nofollow', true);
}

set_exception_handler(function (Throwable $e): void {
    $debug = (bool) app_config('app.debug', false);
    $log = sprintf("[%s] %s in %s:%d\n%s\n", date('c'), $e->getMessage(), $e->getFile(), $e->getLine(), $e->getTraceAsString());
    @file_put_contents(dirname(__DIR__) . '/storage/logs/app.log', $log, FILE_APPEND | LOCK_EX);
    if (headers_sent()) { echo $debug ? e($e->getMessage()) : 'Beklenmeyen bir hata oluştu.'; return; }
    http_response_code(500);
    if ($debug) {
        echo '<pre style="white-space:pre-wrap;padding:24px">' . e($log) . '</pre>';
    } else {
        echo '<!doctype html><html lang="tr"><meta charset="utf-8"><meta name="viewport" content="width=device-width"><title>İşlem tamamlanamadı</title><body style="font-family:system-ui;padding:40px;background:#f4f1eb;color:#17352f"><h1>İşlem tamamlanamadı</h1><p>Lütfen kısa süre sonra tekrar deneyin.</p></body></html>';
    }
});
