<?php
/**
 * HaberCMS Installation Wizard
 * Fully standalone — no Symfony/bin/console dependency.
 * Creates tables, seeds demo data, creates admin user via PDO.
 */
set_time_limit(300);
error_reporting(E_ALL);

$projectDir = dirname(__DIR__);
$lockFile = $projectDir . '/.installed';

// Zaten kuruluysa engelle
if (file_exists($lockFile)) {
    echo '<!DOCTYPE html><html><head><meta charset="UTF-8"><title>Zaten Kurulu</title></head>';
    echo '<body style="font-family:sans-serif;display:flex;align-items:center;justify-content:center;height:100vh;margin:0;background:#f8f9fa">';
    echo '<div style="text-align:center"><h1>HaberCMS Zaten Kurulu</h1><p><a href="/admin">Admin Panele Git</a></p></div></body></html>';
    exit;
}

$step = $_POST['step'] ?? $_GET['step'] ?? '1';
$error = '';

// ======================== STEP 1: Requirements ========================
if ($step === '1') {
    $checks = [];
    $checks['PHP >= 8.1'] = version_compare(PHP_VERSION, '8.1.0', '>=');
    $checks['PDO MySQL'] = extension_loaded('pdo_mysql');
    $checks['cURL'] = extension_loaded('curl');
    $checks['JSON'] = extension_loaded('json');
    $checks['mbstring'] = extension_loaded('mbstring');
    $checks['var/ yazılabilir'] = is_writable($projectDir . '/var') || @mkdir($projectDir . '/var', 0775, true);
    $allPassed = !in_array(false, $checks, true);
}

// ======================== STEP 2: Database ========================
if ($step === '2' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $dbHost = $_POST['db_host'] ?? 'localhost';
    $dbPort = $_POST['db_port'] ?? '3306';
    $dbName = $_POST['db_name'] ?? '';
    $dbUser = $_POST['db_user'] ?? '';
    $dbPass = $_POST['db_pass'] ?? '';

    try {
        $pdo = new PDO("mysql:host=$dbHost;port=$dbPort;dbname=$dbName;charset=utf8mb4", $dbUser, $dbPass, [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        ]);

        // .env ve .env.local oluştur
        $secret = bin2hex(random_bytes(16));
        $passEncoded = urlencode($dbPass);
        $userEncoded = urlencode($dbUser);
        // Symfony .env treats % as special (parameter reference).
        // Double every % so that url-encoded chars like %3F become %%3F
        // and Symfony reads them as literal percent signs.
        $passEncoded = str_replace('%', '%%', $passEncoded);
        $userEncoded = str_replace('%', '%%', $userEncoded);
        $dbUrl = "mysql://{$userEncoded}:{$passEncoded}@{$dbHost}:{$dbPort}/{$dbName}?serverVersion=10.4.28-MariaDB&charset=utf8mb4";

        $protocol = (!empty($_SERVER['HTTPS']) && $_SERVER['HTTPS'] !== 'off') ? 'https' : 'http';
        $defaultUri = $protocol . '://' . ($_SERVER['HTTP_HOST'] ?? 'localhost');

        $envContent = "APP_ENV=prod\nAPP_DEBUG=0\nAPP_SECRET={$secret}\n";
        $envContent .= "DATABASE_URL=\"{$dbUrl}\"\n";
        $envContent .= "LICENSE_API_URL=https://habercms.com.tr\nMAILER_DSN=null://null\n";
        $envContent .= "DEFAULT_URI={$defaultUri}\n";

        file_put_contents($projectDir . '/.env', $envContent);
        file_put_contents($projectDir . '/.env.local', $envContent);

        // DB bilgilerini session'a kaydet
        session_start();
        $_SESSION['db'] = compact('dbHost', 'dbPort', 'dbName', 'dbUser', 'dbPass');

        // Schema oluştur
        $schemaFile = $projectDir . '/config/schema.sql';
        if (file_exists($schemaFile)) {
            $sql = file_get_contents($schemaFile);
            $pdo->exec($sql);
        }

        // Demo verileri seed et
        seedDemoData($pdo);

        $step = '4_form'; // Admin adımına geç
    } catch (\Exception $e) {
        $error = 'Veritabanı hatası: ' . $e->getMessage();
        $step = '2_form';
    }
}

// ======================== STEP 4: Admin User ========================
if ($step === '4' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $email = $_POST['admin_email'] ?? '';
    $password = $_POST['admin_pass'] ?? '';
    $name = $_POST['admin_name'] ?? 'Admin';

    if (!$email || !$password) {
        $error = 'E-posta ve şifre gerekli.';
        $step = '4_form';
    } else {
        try {
            session_start();
            $db = $_SESSION['db'] ?? null;
            if (!$db) {
                // .env.local'dan oku
                $envContent = file_get_contents($projectDir . '/.env.local');
                preg_match('/DATABASE_URL="mysql:\/\/([^:]+):([^@]*)@([^:]+):(\d+)\/([^?]+)/', $envContent, $m);
                // Undo Symfony %% escaping, then URL-decode
                $db = ['dbUser' => urldecode(str_replace('%%', '%', $m[1])), 'dbPass' => urldecode(str_replace('%%', '%', $m[2])), 'dbHost' => $m[3], 'dbPort' => $m[4], 'dbName' => $m[5]];
            }

            $pdo = new PDO("mysql:host={$db['dbHost']};port={$db['dbPort']};dbname={$db['dbName']};charset=utf8mb4", $db['dbUser'], $db['dbPass'], [
                PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
            ]);

            // Şifreyi hash'le
            $hashedPassword = password_hash($password, PASSWORD_BCRYPT);
            $username = explode('@', $email)[0];

            $stmt = $pdo->prepare("INSERT INTO users (username, email, password, full_name, role, permissions, is_active, created_at, updated_at) VALUES (?, ?, ?, ?, 'ROLE_SUPER_ADMIN', '[]', 1, NOW(), NOW())");
            $stmt->execute([$username, $email, $hashedPassword, $name]);

            $step = '5_form';
        } catch (\Exception $e) {
            $error = 'Admin oluşturma hatası: ' . $e->getMessage();
            $step = '4_form';
        }
    }
}

// ======================== STEP 5: License Key ========================
if ($step === '5' && $_SERVER['REQUEST_METHOD'] === 'POST') {
    $licenseKey = trim($_POST['license_key'] ?? '');
    $domain = $_SERVER['HTTP_HOST'] ?? '';

    try {
        session_start();
        $db = $_SESSION['db'] ?? null;
        if (!$db) {
            $envContent = file_get_contents($projectDir . '/.env.local');
            preg_match('/DATABASE_URL="mysql:\/\/([^:]+):([^@]*)@([^:]+):(\d+)\/([^?]+)/', $envContent, $m);
            // Undo Symfony %% escaping, then URL-decode
            $db = ['dbUser' => urldecode(str_replace('%%', '%', $m[1])), 'dbPass' => urldecode(str_replace('%%', '%', $m[2])), 'dbHost' => $m[3], 'dbPort' => $m[4], 'dbName' => $m[5]];
        }

        $pdo = new PDO("mysql:host={$db['dbHost']};port={$db['dbPort']};dbname={$db['dbName']};charset=utf8mb4", $db['dbUser'], $db['dbPass'], [
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION,
        ]);

        $now = date('Y-m-d H:i:s');
        $demoExpires = date('Y-m-d H:i:s', strtotime('+7 days'));
        $status = 'demo';
        $plan = 'starter';
        $expiresAt = null;
        $cacheJson = null;

        // Lisans doğrula
        if ($licenseKey) {
            $body = json_encode(['license_key' => $licenseKey, 'domain' => $domain]);
            $sig = hash_hmac('sha256', $body, $licenseKey);
            $ch = curl_init('https://habercms.com.tr/api/license/verify');
            curl_setopt_array($ch, [
                CURLOPT_RETURNTRANSFER => true, CURLOPT_POST => true, CURLOPT_POSTFIELDS => $body,
                CURLOPT_HTTPHEADER => ['Content-Type: application/json', 'X-HaberCMS-Signature: ' . $sig],
                CURLOPT_TIMEOUT => 10, CURLOPT_SSL_VERIFYPEER => false,
            ]);
            $resp = curl_exec($ch);
            curl_close($ch);
            $data = json_decode($resp, true);

            if (($data['valid'] ?? false) === true) {
                $status = 'active';
                $plan = $data['plan'] ?? 'starter';
                $expiresAt = isset($data['expires_at']) ? date('Y-m-d H:i:s', strtotime($data['expires_at'])) : null;
                $cacheJson = $resp;
                $demoExpires = null;
            } else {
                $error = 'Lisans doğrulanamadı: ' . ($data['message'] ?? 'Bilinmeyen hata') . '. Demo olarak devam ediliyor.';
            }
        }

        // Installation kaydı
        $pdo->exec("DELETE FROM installation WHERE id = 1");
        $stmt = $pdo->prepare("INSERT INTO installation (id, license_key, domain, plan, license_status, license_expires_at, license_cached_at, license_cache_json, installed_at, demo_expires_at, current_version) VALUES (1, ?, ?, ?, ?, ?, ?, ?, ?, ?, '1.0.0')");
        $stmt->execute([$licenseKey ?: null, $domain, $plan, $status, $expiresAt, $licenseKey ? $now : null, $cacheJson, $now, $demoExpires]);

        // Lock dosyası
        file_put_contents($lockFile, date('c'));

        // Cache temizle (PHP ile, CLI'ya bağımlı değil)
        $cacheDir = $projectDir . '/var/cache';
        if (is_dir($cacheDir)) {
            $it = new \RecursiveIteratorIterator(
                new \RecursiveDirectoryIterator($cacheDir, \RecursiveDirectoryIterator::SKIP_DOTS),
                \RecursiveIteratorIterator::CHILD_FIRST
            );
            foreach ($it as $f) {
                if ($f->isDir()) @rmdir($f->getRealPath());
                else @unlink($f->getRealPath());
            }
        }

        $step = '6';
    } catch (\Exception $e) {
        $error = 'Hata: ' . $e->getMessage();
        $step = '5_form';
    }
}

// Default steps
if ($step === '2') $step = '2_form';
if ($step === '4') $step = '4_form';
if ($step === '5') $step = '5_form';

// ======================== SEED DATA FUNCTION ========================
function seedDemoData(PDO $pdo): void
{
    $now = date('Y-m-d H:i:s');

    // Kategoriler
    $cats = [
        [1, 'Gündem', 'gundem', '#ef4444', 'fas fa-newspaper'],
        [2, 'Ekonomi', 'ekonomi', '#10b981', 'fas fa-chart-line'],
        [3, 'Dünya', 'dunya', '#3b82f6', 'fas fa-globe'],
        [4, 'Spor', 'spor', '#f59e0b', 'fas fa-futbol'],
        [5, 'Teknoloji', 'teknoloji', '#8b5cf6', 'fas fa-microchip'],
        [6, 'Sağlık', 'saglik', '#ec4899', 'fas fa-heartbeat'],
        [7, 'Kültür-Sanat', 'kultur-sanat', '#06b6d4', 'fas fa-palette'],
        [8, 'Eğitim', 'egitim', '#84cc16', 'fas fa-graduation-cap'],
    ];
    foreach ($cats as $c) {
        $pdo->prepare("INSERT IGNORE INTO categories (id, title, slug, color, icon, status, position, created_at, updated_at) VALUES (?, ?, ?, ?, ?, 'active', ?, ?, ?)")
            ->execute([$c[0], $c[1], $c[2], $c[3], $c[4], $c[0], $now, $now]);
    }

    // Etiketler
    $tags = ['Yapay Zeka', 'Ekonomi', 'Türkiye', 'Avrupa', 'Futbol', 'Sağlık', 'Teknoloji', 'Dijital', 'Eğitim', 'Çevre'];
    foreach ($tags as $i => $t) {
        $slug = slugify($t);
        $pdo->prepare("INSERT IGNORE INTO tags (name, slug, created_at) VALUES (?, ?, ?)")->execute([$t, $slug, $now]);
    }

    // Yazarlar
    $authors = [
        ['Ahmet Yılmaz', 'ahmet-yilmaz', 'Kıdemli gazeteci, siyaset ve ekonomi alanında uzman.', 'ahmet@example.com'],
        ['Elif Demir', 'elif-demir', 'Teknoloji editörü. Yapay zeka ve dijital dönüşüm.', 'elif@example.com'],
        ['Mehmet Kaya', 'mehmet-kaya', 'Spor muhabiri. Futbol ve basketbol takibi.', 'mehmet@example.com'],
        ['Zeynep Arslan', 'zeynep-arslan', 'Sağlık ve bilim editörü.', 'zeynep@example.com'],
    ];
    foreach ($authors as $a) {
        $photo = 'https://ui-avatars.com/api/?name=' . urlencode($a[0]) . '&size=200&background=3b82f6&color=fff';
        $pdo->prepare("INSERT IGNORE INTO authors (name, slug, bio, email, photo, is_active, created_at) VALUES (?, ?, ?, ?, ?, 1, ?)")
            ->execute([$a[0], $a[1], $a[2], $a[3], $photo, $now]);
    }

    // Demo haberler
    $news = [
        ['Türkiye\'de Yapay Zeka Yatırımları Rekor Seviyeye Ulaştı', 'turkiyede-yapay-zeka-yatirimlari-rekor', 'Yapay zeka yatırımları yüzde 150 artış göstererek rekor seviyeye ulaştı.', '<p>Türkiye teknoloji sektöründe büyük bir dönüşüm yaşanıyor.</p><h2>Sektördeki Gelişmeler</h2><p>Büyük teknoloji şirketleri yapay zeka Ar-Ge merkezlerini Türkiye\'de açmaya devam ediyor.</p>', 5, 1, 1, 1],
        ['Merkez Bankası Faiz Kararını Açıkladı', 'merkez-bankasi-faiz-kararini-acikladi', 'Merkez Bankası politika faizini sabit tutma kararı aldı.', '<p>TCMB Para Politikası Kurulu faiz kararını açıkladı.</p><p>Karar sonrası piyasalarda sınırlı hareketlilik gözlendi.</p>', 2, 1, 0, 1],
        ['Galatasaray Şampiyonlar Ligi\'nde Tarihi Galibiyet', 'galatasaray-sampiyonlar-liginde-galibiyet', 'Galatasaray deplasmanda 3-1 galip gelerek grubunu lider tamamladı.', '<p>Galatasaray Şampiyonlar Ligi\'nde tarihi bir galibiyet aldı.</p>', 4, 1, 1, 1],
        ['Yeni Kanser Tedavisi Umut Verici Sonuçlar Gösterdi', 'yeni-kanser-tedavisi-umut-verici', 'Türk bilim insanlarının tedavisi klinik deneylerde başarılı oldu.', '<p>Yeni immünoterapi tabanlı tedavi yüzde 40 iyileşme oranı sağladı.</p>', 6, 0, 1, 0],
        ['AB Dijital Dönüşüm Stratejisini Güncelledi', 'ab-dijital-donusum-stratejisi', 'AB yeni dijital strateji planını açıkladı.', '<p>Avrupa Birliği dijital dönüşüm stratejisini güncelledi.</p>', 3, 0, 1, 0],
        ['Elektrikli Araç Satışları Yüzde 200 Arttı', 'elektrikli-arac-satislari-artti', 'Türkiye\'de elektrikli araç pazarı hızla büyüyor.', '<p>2026 ilk çeyrekte elektrikli araç satışları yüzde 200 arttı. TOGG satışları lokomotif oldu.</p>', 2, 0, 0, 1],
        ['Türkiye\'nin İlk Uzay Aracı Fırlatıldı', 'turkiyenin-ilk-uzay-araci-firlatildi', 'TUA\'nın uydusu başarıyla yörüngeye yerleştirildi.', '<p>Türkiye Uzay Ajansı yerli iletişim uydusunu fırlattı.</p>', 5, 1, 1, 1],
        ['İstanbul Kültür Festivali Başlıyor', 'istanbul-kultur-festivali-basliyor', '30 ülkeden 200 sanatçı İstanbul\'da buluşuyor.', '<p>İstanbul Kültür ve Sanat Festivali rekor katılımla başlıyor.</p>', 7, 0, 0, 0],
        ['Üniversite Sınav Sistemi Değişiyor', 'universite-sinav-sistemi-degisiyor', 'YÖK yeni sınav formatını açıkladı.', '<p>Beceri tabanlı sorular ağırlık kazanacak.</p>', 8, 1, 0, 0],
        ['Deprem Erken Uyarı Sistemi Devreye Girdi', 'deprem-erken-uyari-sistemi', 'AFAD\'ın yeni erken uyarı sistemi 81 ilde aktif.', '<p>Yeni nesil deprem erken uyarı sistemi devreye girdi.</p>', 1, 1, 1, 0],
        ['Siber Güvenlik Tehditleri 2026 Raporu', 'siber-guvenlik-tehditleri-2026', 'Siber saldırılar geçen yıla göre 3 kat arttı.', '<p>Ulusal Siber Güvenlik Merkezi yıllık raporunu yayınladı.</p>', 5, 0, 0, 0],
        ['Fenerbahçe Avrupa Ligi Çeyrek Finalde', 'fenerbahce-avrupa-liginde-ceyrekte', 'Sarı-lacivertliler son 8\'e kaldı.', '<p>Fenerbahçe Avrupa Ligi\'nde çeyrek finale yükseldi.</p>', 4, 1, 0, 1],
        ['Yenilenebilir Enerji Üretimi Rekor Kırdı', 'yenilenebilir-enerji-uretimi-rekor', 'Rüzgar ve güneş enerjisi toplam üretimin yüzde 40\'ına ulaştı.', '<p>Türkiye\'de yenilenebilir enerji rekor seviyeye ulaştı.</p>', 2, 0, 1, 0],
        ['Okullarda Kodlama Eğitimi Zorunlu Oluyor', 'okullarda-kodlama-egitimi-zorunlu', 'MEB müfredatına kodlama dersi ekleniyor.', '<p>İlkokul 3. sınıftan itibaren kodlama dersi zorunlu olacak.</p>', 8, 0, 1, 0],
        ['Turizm Gelirlerinde Tarihi Rekor', 'turizm-gelirlerinde-tarihi-rekor', 'Türkiye 60 milyon turist hedefine ulaştı.', '<p>2026 yılında turizm gelirlerinde rekor kırıldı.</p>', 2, 0, 0, 1],
    ];

    foreach ($news as $i => $n) {
        $pubDate = date('Y-m-d H:i:s', strtotime("-{$i} hours -" . rand(0, 59) . " minutes"));
        $img = "https://picsum.photos/seed/news" . ($i + 1) . "/800/450";
        $views = rand(200, 10000);
        $pdo->prepare("INSERT IGNORE INTO news (title, slug, spot, content, category_id, status, is_breaking, is_headline, is_featured, allow_comments, show_in_amp, featured_image, seo_title, seo_description, view_count, published_at, created_at, updated_at) VALUES (?, ?, ?, ?, ?, 'published', ?, ?, ?, 1, 1, ?, ?, ?, ?, ?, ?, ?)")
            ->execute([$n[0], $n[1], $n[2], $n[3], $n[4], $n[5], $n[6], $n[7], $img, $n[0], $n[2], $views, $pubDate, $now, $now]);
    }

    // Sayfalar
    $pages = [
        ['Hakkımızda', 'hakkimizda', '<h2>Biz Kimiz?</h2><p>Güvenilir, hızlı ve tarafsız haber yayıncılığı misyonuyla çalışıyoruz.</p>', 1],
        ['İletişim', 'iletisim', '<h2>Bize Ulaşın</h2><p><strong>E-posta:</strong> info@orneksite.com<br><strong>Telefon:</strong> +90 (212) 000 00 00</p>', 2],
        ['Künye', 'kunye', '<h2>Künye Bilgileri</h2><p>Bu site HaberCMS altyapısı ile yayınlanmaktadır.</p>', 3],
        ['Gizlilik Politikası', 'gizlilik-politikasi', '<h2>Gizlilik Politikası</h2><p>Kişisel verilerinizin korunması bizim için önemlidir.</p>', 4],
    ];
    foreach ($pages as $p) {
        $pdo->prepare("INSERT IGNORE INTO pages (title, slug, content, status, position, created_at, updated_at) VALUES (?, ?, ?, 'published', ?, ?, ?)")
            ->execute([$p[0], $p[1], $p[2], $p[3], $now, $now]);
    }

    // Menüler
    $pdo->exec("INSERT IGNORE INTO menus (id, name, slug, location, is_active, created_at) VALUES (1, 'Ana Menü', 'ana-menu', 'header', 1, '$now'), (2, 'Footer Menü', 'footer-menu', 'footer', 1, '$now')");

    $menuItems = [
        [1, 'Ana Sayfa', '/', 'custom', 'fas fa-home', 1],
        [1, 'Gündem', '/kategori/gundem', 'category', 'fas fa-newspaper', 2],
        [1, 'Ekonomi', '/kategori/ekonomi', 'category', 'fas fa-chart-line', 3],
        [1, 'Spor', '/kategori/spor', 'category', 'fas fa-futbol', 4],
        [1, 'Teknoloji', '/kategori/teknoloji', 'category', 'fas fa-microchip', 5],
        [2, 'Hakkımızda', '/sayfa/hakkimizda', 'page', null, 1],
        [2, 'İletişim', '/sayfa/iletisim', 'page', null, 2],
        [2, 'Künye', '/sayfa/kunye', 'page', null, 3],
        [2, 'Gizlilik', '/sayfa/gizlilik-politikasi', 'page', null, 4],
    ];
    foreach ($menuItems as $mi) {
        $pdo->prepare("INSERT IGNORE INTO menu_items (menu_id, title, url, type, icon, position, target, is_active) VALUES (?, ?, ?, ?, ?, ?, '_self', 1)")
            ->execute([$mi[0], $mi[1], $mi[2], $mi[3], $mi[4], $mi[5]]);
    }

    // Anket
    $pdo->exec("INSERT IGNORE INTO polls (id, question, status, multiple_choice, show_results, total_votes, created_at) VALUES (1, 'Sizce en önemli teknoloji trendi hangisi?', 'active', 0, 1, 0, '$now')");
    $pollOpts = ['Yapay Zeka', 'Blockchain', 'Kuantum Bilişim', 'Artırılmış Gerçeklik', 'Nesnelerin İnterneti'];
    foreach ($pollOpts as $i => $o) {
        $pdo->prepare("INSERT IGNORE INTO poll_options (poll_id, option_text, vote_count, position) VALUES (1, ?, ?, ?)")->execute([$o, rand(5, 50), $i + 1]);
    }

    // Modüller
    $modules = ['core', 'menu', 'comment', 'seo', 'widget', 'advertisement', 'poll', 'theme', 'amp', 'agency', 'horoscope'];
    foreach ($modules as $m) {
        $pdo->prepare("INSERT IGNORE INTO module_configs (module_slug, is_active, config, activated_at, created_at) VALUES (?, 1, '{}', ?, ?)")->execute([$m, $now, $now]);
    }

    // Ayarlar
    $settings = [
        ['site_name', 'Yeni Haber Sitesi', 'general', 'text'],
        ['site_description', 'Güncel haberler, son dakika gelişmeleri', 'general', 'text'],
        ['site_logo', '', 'general', 'image'],
        ['site_favicon', '', 'general', 'image'],
        ['footer_text', '© ' . date('Y') . ' Tüm Hakları Saklıdır.', 'general', 'text'],
        ['google_analytics_id', '', 'analytics', 'text'],
        ['social_facebook', 'https://facebook.com', 'social', 'text'],
        ['social_twitter', 'https://twitter.com', 'social', 'text'],
        ['social_instagram', 'https://instagram.com', 'social', 'text'],
        ['contact_email', 'info@orneksite.com', 'contact', 'text'],
        ['contact_phone', '+90 (212) 000 00 00', 'contact', 'text'],
        ['news_per_page', '12', 'news', 'number'],
        ['comments_enabled', '1', 'comments', 'boolean'],
        ['primary_color', '#3b82f6', 'theme', 'text'],
        ['show_breaking_ticker', '1', 'news', 'boolean'],
        ['amp_enabled', '1', 'amp', 'boolean'],
    ];
    foreach ($settings as $s) {
        $pdo->prepare("INSERT IGNORE INTO settings (setting_key, setting_value, setting_group, setting_type) VALUES (?, ?, ?, ?)")->execute($s);
    }
}

function slugify(string $text): string {
    $tr = ['ı'=>'i','ö'=>'o','ü'=>'u','ş'=>'s','ç'=>'c','ğ'=>'g','İ'=>'i','Ö'=>'o','Ü'=>'u','Ş'=>'s','Ç'=>'c','Ğ'=>'g'];
    $text = strtr(mb_strtolower($text), $tr);
    return trim(preg_replace('/[^a-z0-9]+/', '-', $text), '-');
}

?>
<!DOCTYPE html>
<html lang="tr">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width,initial-scale=1">
<title>HaberCMS Kurulum</title>
<style>
*{margin:0;padding:0;box-sizing:border-box}
body{font-family:'Inter',system-ui,sans-serif;background:#f0f2f5;min-height:100vh;display:flex;align-items:center;justify-content:center;padding:20px}
.card{background:#fff;border-radius:16px;box-shadow:0 8px 30px rgba(0,0,0,.08);max-width:520px;width:100%;padding:40px}
.logo{font-size:1.5rem;font-weight:800;color:#1a1a2e;margin-bottom:4px}
.logo span{color:#635bff}
.sub{font-size:.85rem;color:#8898aa;margin-bottom:24px}
.steps{display:flex;gap:4px;margin-bottom:28px}
.step-dot{width:100%;height:4px;border-radius:2px;background:#e3e8ee}
.step-dot.active{background:#635bff}
.step-dot.done{background:#33d69f}
h2{font-size:1.2rem;font-weight:700;color:#1a1a2e;margin-bottom:16px}
.check{display:flex;justify-content:space-between;padding:8px 0;border-bottom:1px solid #f0f2f5;font-size:.9rem}
.check .ok{color:#33d69f;font-weight:600}
.check .fail{color:#f72585;font-weight:600}
label{display:block;font-size:.82rem;font-weight:600;color:#425466;margin-bottom:4px}
input,select,textarea{width:100%;padding:10px 14px;border:1.5px solid #e3e8ee;border-radius:8px;font-size:.9rem;margin-bottom:12px;font-family:inherit}
input:focus{outline:none;border-color:#635bff}
.btn{display:block;width:100%;padding:12px;background:#635bff;color:#fff;border:none;border-radius:8px;font-size:.95rem;font-weight:600;cursor:pointer;font-family:inherit}
.btn:hover{background:#4b45c6}
.err{background:#fef2f2;border:1px solid #fecaca;color:#dc2626;padding:10px 14px;border-radius:8px;margin-bottom:16px;font-size:.85rem;word-break:break-all}
.ok-box{background:#f0fdf4;border:1px solid #bbf7d0;color:#16a34a;padding:10px 14px;border-radius:8px;margin-bottom:16px;font-size:.85rem}
.row{display:grid;grid-template-columns:1fr 1fr;gap:10px}
a{color:#635bff;text-decoration:none;font-weight:600}
</style>
</head>
<body>
<div class="card">
<div class="logo">Haber<span>CMS</span></div>
<p class="sub">Kurulum Sihirbazı</p>

<div class="steps">
<?php for ($i = 1; $i <= 5; $i++):
    $currentStep = (int) preg_replace('/[^0-9]/', '', $step);
    if ($step === '6') $currentStep = 6;
    $cls = $i < $currentStep ? 'done' : ($i === $currentStep ? 'active' : '');
?>
    <div class="step-dot <?= $cls ?>"></div>
<?php endfor; ?>
</div>

<?php if ($error): ?><div class="err"><?= htmlspecialchars($error) ?></div><?php endif; ?>

<?php if ($step === '1'): ?>
    <h2>1/5 — Gereksinimler</h2>
    <?php foreach ($checks as $label => $ok): ?>
        <div class="check"><span><?= $label ?></span><span class="<?= $ok ? 'ok' : 'fail' ?>"><?= $ok ? '✓' : '✗' ?></span></div>
    <?php endforeach; ?>
    <br>
    <?php if ($allPassed): ?>
        <form method="get"><input type="hidden" name="step" value="2"><button class="btn">Devam →</button></form>
    <?php else: ?>
        <p style="color:#f72585;font-size:.85rem">Eksik gereksinimleri tamamlayın.</p>
    <?php endif; ?>

<?php elseif ($step === '2_form'): ?>
    <h2>2/5 — Veritabanı</h2>
    <form method="post">
        <input type="hidden" name="step" value="2">
        <div class="row">
            <div><label>Host</label><input name="db_host" value="<?= $_POST['db_host'] ?? 'localhost' ?>" required></div>
            <div><label>Port</label><input name="db_port" value="<?= $_POST['db_port'] ?? '3306' ?>" required></div>
        </div>
        <label>Veritabanı Adı</label><input name="db_name" value="<?= $_POST['db_name'] ?? '' ?>" required placeholder="haber_cms">
        <label>Kullanıcı</label><input name="db_user" value="<?= $_POST['db_user'] ?? '' ?>" required>
        <label>Şifre</label><input name="db_pass" type="password" value="<?= $_POST['db_pass'] ?? '' ?>">
        <button class="btn">Bağlantıyı Test Et & Devam →</button>
    </form>

<?php elseif ($step === '4_form'): ?>
    <h2>3/5 — Admin Kullanıcı</h2>
    <div class="ok-box">✅ Veritabanı şeması ve demo veriler başarıyla oluşturuldu!</div>
    <form method="post">
        <input type="hidden" name="step" value="4">
        <label>Ad Soyad</label><input name="admin_name" value="Admin" required>
        <label>E-posta</label><input name="admin_email" type="email" required placeholder="admin@site.com">
        <label>Şifre</label><input name="admin_pass" type="password" required placeholder="En az 6 karakter">
        <button class="btn">Admin Oluştur & Devam →</button>
    </form>

<?php elseif ($step === '5_form'): ?>
    <h2>4/5 — Lisans Anahtarı</h2>
    <div class="ok-box">✅ Admin kullanıcı oluşturuldu!</div>
    <form method="post">
        <input type="hidden" name="step" value="5">
        <label>Lisans Anahtarı</label>
        <input name="license_key" value="<?= $_POST['license_key'] ?? '' ?>" placeholder="NH-XXXX-XXXX-XXXX-XXXX">
        <p style="font-size:.78rem;color:#8898aa;margin:-8px 0 16px">Lisansınız yoksa boş bırakın — 7 gün ücretsiz demo.</p>
        <button class="btn">Kurulumu Tamamla</button>
    </form>

<?php elseif ($step === '6'): ?>
    <h2>✅ Kurulum Tamamlandı!</h2>
    <div class="ok-box">HaberCMS başarıyla kuruldu. Demo haberler, kategoriler ve sayfalar oluşturuldu.</div>
    <p style="font-size:.9rem;color:#425466;margin-bottom:20px">Admin panele giriş yapabilirsiniz.</p>
    <a href="/admin" class="btn" style="text-align:center;text-decoration:none;display:block">Admin Panele Git →</a>

<?php endif; ?>
</div>
</body>
</html>
