<?php
namespace Core\System;

class Language
{
    protected static string $current   = 'en';
    protected static array  $strings   = [];
    protected static string $direction = 'ltr';
    protected static string $name      = 'English';

 
    public static function load(): void
    {
        if (session_status() === PHP_SESSION_NONE) {
            session_start();
        }

        $lang = null;

        // 1️⃣ أولوية اختيار المستخدم
        if (!empty($_SESSION['mt_lang'])) {
            $lang = $_SESSION['mt_lang'];
        }

        // 2️⃣ إن لم يوجد → نقرأ من قاعدة البيانات
        if (!$lang && function_exists('db')) {
            try {
                $stmt = db()->prepare(
                    "SELECT setting_value
                     FROM settings
                     WHERE setting_key = 'default_language'
                     LIMIT 1"
                );
                $stmt->execute();
                $lang = $stmt->fetchColumn() ?: null;
            } catch (\Throwable $e) {
                // تجاهل أي خطأ
            }
        }

        // 3️⃣ fallback
        if (!$lang) {
            $lang = 'en';
        }

        // تحميل اللغة
        self::loadJson($lang);

        // حفظها في session ككاش فقط
        $_SESSION['mt_lang'] = $lang;
    }

    /**
     * تحميل ملف JSON للغة
     */
    protected static function loadJson(string $code): void
    {
        $baseDir = defined('ROOT_PATH')
            ? ROOT_PATH
            : dirname(__DIR__, 2);

        $file = $baseDir . "/lang/{$code}.json";

        if (!file_exists($file)) {
            // fallback إلى الإنجليزية
            $file = $baseDir . "/lang/en.json";
            $code = 'en';
        }

        $data = json_decode(@file_get_contents($file), true);
        if (!is_array($data)) {
            $data = [];
        }

        self::$strings   = $data;
        self::$direction = $data['language.direction'] ?? 'ltr';
        self::$name      = $data['language.name'] ?? strtoupper($code);
        self::$current   = $code;
    }

    /**
     * تغيير اللغة يدويًا (من أيقونة اللغة مثلاً)
     */
    public static function set(string $code): void
    {
        if (session_status() === PHP_SESSION_NONE) {
            session_start();
        }

        $_SESSION['mt_lang'] = $code;
        self::loadJson($code);
    }

    /**
     * جلب نص مترجم
     */
    public static function get(string $key, ?string $default = null): string
    {
        return self::$strings[$key] ?? ($default ?? $key);
    }

    /**
     * رمز اللغة الحالي
     */
    public static function code(): string
    {
        return self::$current;
    }

    /**
     * اتجاه اللغة (rtl / ltr)
     */
    public static function direction(): string
    {
        return self::$direction;
    }

    /**
     * اسم اللغة
     */
    public static function name(): string
    {
        return self::$name;
    }
}

/**
 * الدالة العامة للترجمة
 */
if (!function_exists('__')) {
    function __(string $key, string $fallback = null): string
    {
        return Language::get($key, $fallback ?? $key);
    }
}
