<?php
/**
 * lib/i18n.php — NXS Panel Internationalization Library
 */

declare(strict_types=1);

// Mevcut dil verilerini tutan global dizi ve tampon durumu
global $lang_arr, $i18n_buffer_active;
$lang_arr = [];
$i18n_buffer_active = false;

/**
 * Aktif dili döndürür (varsayılan: tr, desteklenenler: tr, en, de)
 */
function panel_lang(): string
{
    if (session_status() === PHP_SESSION_NONE) {
        session_start();
    }
    
    // URL üzerinden gelen dil seçeneği önceliklidir ve session'a kaydedilir
    if (isset($_GET['lang'])) {
        $requestedLang = trim($_GET['lang']);
        if (in_array($requestedLang, ['tr', 'en', 'de'], true)) {
            $_SESSION['panel_lang'] = $requestedLang;
            return $requestedLang;
        }
    }

    return $_SESSION['panel_lang'] ?? 'en';
}

/**
 * Dil dosyasını yükler ve çeviri dizisini hazırlar
 */
function i18n_load(): void
{
    global $lang_arr;
    if (!empty($lang_arr)) {
        return;
    }
    
    $lang = panel_lang();
    $file = __DIR__ . '/../lang/' . $lang . '.php';
    
    // Eğer seçilen dil dosyası yoksa varsayılan Türkçe'ye düş
    if (!is_file($file)) {
        $file = __DIR__ . '/../lang/tr.php';
    }
    
    if (is_file($file)) {
        $loaded = require $file;
        if (is_array($loaded)) {
            $lang_arr = $loaded;
        }
    }
}

/**
 * Çeviri fonksiyonu (Metin bulunamazsa varsayılanı veya anahtarı döndürür)
 */
if (!function_exists('__')) {
    function __(string $key, string $default = ''): string
    {
        global $lang_arr;
        i18n_load();
        
        return $lang_arr[$key] ?? ($default !== '' ? $default : $key);
    }
}

/**
 * Çıktı tamponlamasını başlatır
 */
function i18n_begin(): void
{
    global $i18n_buffer_active;
    if (!$i18n_buffer_active) {
        $i18n_buffer_active = true;
        ob_start('i18n_translate_buffer');
    }
}

/**
 * Çıktı tamponlamasını sonlandırır ve ekrana basar
 */
function i18n_end(): void
{
    global $i18n_buffer_active;
    if ($i18n_buffer_active) {
        $i18n_buffer_active = false;
        if (ob_get_level() > 0) {
            ob_end_flush();
        }
    }
}

/**
 * Tampondaki HTML çıktıları tarayıcıya göndermeden önce çevirileri uygular
 */
function i18n_translate_buffer(string $buffer): string
{
    global $lang_arr;
    i18n_load();
    
    if (empty($lang_arr)) {
        return $buffer;
    }

    return strtr($buffer, $lang_arr);
}

/**
 * Dil değiştirme butonunu/dropdown menüsünü oluşturur (Türkçe, English, Deutsch)
 */
function lang_switcher_html(): string
{
    $current = panel_lang();
    $trActive = $current === 'tr' ? ' fw-bold text-primary' : '';
    $enActive = $current === 'en' ? ' fw-bold text-primary' : '';
    $deActive = $current === 'de' ? ' fw-bold text-primary' : '';
    
    return '
    <div class="dropdown d-inline-block ms-2">
        <button class="btn btn-sm btn-outline-secondary dropdown-toggle" type="button" data-bs-toggle="dropdown" aria-expanded="false">
            <i class="la la-language"></i> ' . strtoupper($current) . '
        </button>
        <ul class="dropdown-menu dropdown-menu-end">
            <li><a class="dropdown-item' . $trActive . '" href="?lang=tr">Türkçe</a></li>
            <li><a class="dropdown-item' . $enActive . '" href="?lang=en">English</a></li>
            <li><a class="dropdown-item' . $deActive . '" href="?lang=de">Deutsch</a></li>
        </ul>
    </div>';
}

// URL üzerinden dil değiştirme isteğini hemen yakala ve yönlendir
if (isset($_GET['lang'])) {
    $requestedLang = trim($_GET['lang']);
    if (in_array($requestedLang, ['tr', 'en', 'de'], true)) {
        if (session_status() === PHP_SESSION_NONE) {
            session_start();
        }
        $_SESSION['panel_lang'] = $requestedLang;
        $redirectUrl = strtok($_SERVER['REQUEST_URI'], '?');
        
        // Mevcut GET parametrelerini koruyarak sadece lang değerini güncellemek veya temizlemek için:
        $queryParams = $_GET;
        unset($queryParams['lang']);
        if (!empty($queryParams)) {
            $redirectUrl .= '?' . http_build_query($queryParams);
        }
        
        header('Location: ' . $redirectUrl);
        exit;
    }
}