<?php
if (isset($_GET['embed']) && $_GET['embed']=='1') { if(!defined('UA_EMBED')) define('UA_EMBED', true); }

// admin/settings_store.php
// تخزين/قراءة إعدادات عامة داخل قاعدة البيانات.
// ملاحظة: النسخ السابقة كانت تستخدم أعمدة (key/value) وهذا سبب أخطاء عندك.
// هذه النسخة تعتمد schema: setting_key / setting_value وتدعم التوافق إن وجد جدول قديم.

require_once __DIR__ . '/db_bootstrap.php';

function settings_ensure_table(mysqli $conn): void
{
    // في بعض حالات تلف ملفات InnoDB على XAMPP قد يظهر خطأ:
    // Table 'db.app_settings' doesn't exist in engine
    // رغم أن الجدول (تعريفاً) موجود. الحل: DROP + CREATE.

    $createSql = "CREATE TABLE IF NOT EXISTS app_settings (
        setting_key   VARCHAR(100) NOT NULL PRIMARY KEY,
        setting_value LONGTEXT NULL,
        updated_at    TIMESTAMP NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
    ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4";

    try {
        $conn->query($createSql);
    } catch (Throwable $e) {
        // لا نوقف النظام هنا، نحاول إعادة الإنشاء.
        try { $conn->query("DROP TABLE IF EXISTS app_settings"); } catch (Throwable $e2) {}
        $conn->query(str_replace('IF NOT EXISTS ', '', $createSql));
    }

    // توافق: إذا كان الجدول موجوداً بأعمدة key/value فقط
    $has_setting_key = false;
    $has_setting_value = false;
    try {
        $res = $conn->query("SHOW COLUMNS FROM app_settings");
        if ($res) {
            while ($r = $res->fetch_assoc()) {
                $f = $r['Field'] ?? '';
                if ($f === 'setting_key') $has_setting_key = true;
                if ($f === 'setting_value') $has_setting_value = true;
            }
        }
    } catch (Throwable $e) {
        $msg = strtolower($e->getMessage());
        // معالجة صريحة لحالة "doesn't exist in engine"
        if (strpos($msg, "doesn't exist in engine") !== false || strpos($msg, "does not exist in engine") !== false) {
            try { $conn->query("DROP TABLE IF EXISTS app_settings"); } catch (Throwable $e2) {}
            $conn->query(str_replace('IF NOT EXISTS ', '', $createSql));
            $res = $conn->query("SHOW COLUMNS FROM app_settings");
            if ($res) {
                while ($r = $res->fetch_assoc()) {
                    $f = $r['Field'] ?? '';
                    if ($f === 'setting_key') $has_setting_key = true;
                    if ($f === 'setting_value') $has_setting_value = true;
                }
            }
        } else {
            // أي خطأ غير معروف: أعد رميه ليتضح في اللوج
            throw $e;
        }
    }
    if (!$has_setting_key) {
        // إذا كان فيه عمود `key`، نعيد تسميته
        $res2 = $conn->query("SHOW COLUMNS FROM app_settings LIKE 'key'");
        if ($res2 && $res2->num_rows) {
            @$conn->query("ALTER TABLE app_settings CHANGE `key` setting_key VARCHAR(100) NOT NULL");
        } else {
            @$conn->query("ALTER TABLE app_settings ADD COLUMN setting_key VARCHAR(100) NOT NULL PRIMARY KEY");
        }
    }
    if (!$has_setting_value) {
        $res3 = $conn->query("SHOW COLUMNS FROM app_settings LIKE 'value'");
        if ($res3 && $res3->num_rows) {
            @$conn->query("ALTER TABLE app_settings CHANGE `value` setting_value LONGTEXT NULL");
        } else {
            @$conn->query("ALTER TABLE app_settings ADD COLUMN setting_value LONGTEXT NULL");
        }
    }
}

function setting_get(mysqli $conn, string $key, $default = null)
{
    settings_ensure_table($conn);
    $k = $conn->real_escape_string($key);

    $res = $conn->query("SELECT setting_value FROM app_settings WHERE setting_key='$k' LIMIT 1");
    if ($res && $res->num_rows) {
        $v = $res->fetch_assoc()['setting_value'];
        if (is_string($v) && $v !== '' && ($v[0] === '{' || $v[0] === '[')) {
            $j = json_decode($v, true);
            if (json_last_error() === JSON_ERROR_NONE) return $j;
        }
        return $v;
    }
    return $default;
}

function setting_set(mysqli $conn, string $key, $value): bool
{
    settings_ensure_table($conn);
    $k = $conn->real_escape_string($key);
    if (is_array($value) || is_object($value)) {
        $value = json_encode($value, JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES);
    }
    $v = $conn->real_escape_string((string)$value);
    return (bool)$conn->query("INSERT INTO app_settings(setting_key,setting_value) VALUES('$k','$v')
        ON DUPLICATE KEY UPDATE setting_value=VALUES(setting_value)");
}
