<?php
/**
 * Ön kontrolcü (router). Tüm istekler buraya düşer.
 */
define('APP_ROOT', __DIR__);
require APP_ROOT . '/app/bootstrap.php';

send_security_headers();

$route  = current_route();
$method = $_SERVER['REQUEST_METHOD'] ?? 'GET';

// Kurulum sihirbazını router üzerinden de erişilebilir yap
// (Apache dışı ortamlarda .htaccess olmadan da çalışır, döngü olmaz).
if (str_starts_with($route, '/install')) {
    require APP_ROOT . '/install/index.php';
    return;
}

// Kurulum yapılmadıysa sihirbaza yönlendir
if (!is_installed()) {
    redirect('install/');
}

require APP_ROOT . '/app/controllers/front.php';
require APP_ROOT . '/app/controllers/admin.php';

/** Basit desen eşleştirici: {param} yakalar. */
function match_route(string $pattern, string $route, ?array &$params): bool
{
    $params = [];
    $regex = preg_replace('#\{([a-z_]+)\}#', '(?P<$1>[^/]+)', $pattern);
    $regex = '#^' . $regex . '/?$#u';
    if (preg_match($regex, $route, $m)) {
        foreach ($m as $k => $v) {
            if (!is_int($k)) {
                $params[$k] = rawurldecode($v);
            }
        }
        return true;
    }
    return false;
}

$routes = [
    // Ön yüz
    ['GET',  '/',                    'front_home'],
    ['GET',  '/menu',               'front_menu'],
    ['GET',  '/kategori/{slug}',    'front_category'],
    ['GET',  '/urun/{slug}',        'front_product'],
    ['GET',  '/etkinlikler',        'front_events'],

    // Admin kimlik
    ['GET',  '/admin',              'admin_home'],
    ['GET',  '/admin/login',        'admin_login_form'],
    ['POST', '/admin/login',        'admin_login'],
    ['GET',  '/admin/logout',       'admin_logout'],
    ['GET',  '/admin/dashboard',    'admin_dashboard'],

    // Kategoriler
    ['GET',  '/admin/kategoriler',          'admin_categories'],
    ['GET',  '/admin/kategori/ekle',        'admin_category_form'],
    ['GET',  '/admin/kategori/duzenle/{id}','admin_category_form'],
    ['POST', '/admin/kategori/kaydet',      'admin_category_save'],
    ['GET',  '/admin/kategori/sil/{id}',    'admin_category_delete'],

    // Ürünler
    ['GET',  '/admin/urunler',              'admin_products'],
    ['GET',  '/admin/urun/ekle',            'admin_product_form'],
    ['GET',  '/admin/urun/duzenle/{id}',    'admin_product_form'],
    ['POST', '/admin/urun/kaydet',          'admin_product_save'],
    ['GET',  '/admin/urun/sil/{id}',        'admin_product_delete'],

    // Etkinlikler
    ['GET',  '/admin/etkinlikler',          'admin_events'],
    ['GET',  '/admin/etkinlik/ekle',        'admin_event_form'],
    ['GET',  '/admin/etkinlik/duzenle/{id}','admin_event_form'],
    ['POST', '/admin/etkinlik/kaydet',      'admin_event_save'],
    ['GET',  '/admin/etkinlik/sil/{id}',    'admin_event_delete'],

    // Ayarlar & AI
    ['GET',  '/admin/ayarlar',       'admin_settings_form'],
    ['POST', '/admin/ayarlar',       'admin_settings_save'],
    ['POST', '/admin/ai',            'admin_ai_analyze'],
];

foreach ($routes as [$m, $pattern, $handler]) {
    if ($m === $method && match_route($pattern, $route, $params)) {
        $handler($params);
        return;
    }
}

// 404
http_response_code(404);
require APP_ROOT . '/app/views/404.php';
