<?php

declare(strict_types=1);

require_once __DIR__ . '/../includes/config.php';
require_once __DIR__ . '/../includes/functions.php';
require_once __DIR__ . '/../includes/auth.php';

if (!function_exists('nay_theme_db')) {
    function nay_theme_db(): ?mysqli
    {
        global $conn;
        return $conn instanceof mysqli ? $conn : null;
    }
}

if (!function_exists('nay_theme_escape')) {
    function nay_theme_escape(string $value): string
    {
        return htmlspecialchars($value, ENT_QUOTES, 'UTF-8');
    }
}

if (!function_exists('nay_theme_normalize_hex')) {
    function nay_theme_normalize_hex(?string $value): string
    {
        $value = trim((string)$value);
        if ($value === '') {
            return '';
        }
        if ($value[0] !== '#') {
            $value = '#' . $value;
        }
        if (preg_match('/^#[0-9a-fA-F]{6}$/', $value)) {
            return strtoupper($value);
        }
        return '';
    }
}

if (!function_exists('nay_theme_field_groups')) {
    function nay_theme_field_groups(): array
    {
        return [
            'identity' => [
                'label' => 'الهوية العامة',
                'description' => 'ألوان الهوية الأساسية والخلفيات والنصوص.',
                'fields' => [
                    'primary_color' => ['لون رئيسي', '#7EC8E3'],
                    'secondary_color' => ['لون ثانوي', '#9AD9EA'],
                    'dark_color' => ['لون داكن', '#1F2937'],
                    'app_background_color' => ['خلفية عامة', '#F8FBFD'],
                    'soft_background_color' => ['مساحات ناعمة', '#EEF7FB'],
                    'card_color' => ['لون الكروت', '#FFFFFF'],
                    'text_primary_color' => ['النص الرئيسي', '#1F2937'],
                    'text_secondary_color' => ['النص الثانوي', '#6B7280'],
                ],
            ],
            'navigation' => [
                'label' => 'الهيدر والتنقل',
                'description' => 'ألوان الشريط العلوي والتوب بار والنافبار السفلي.',
                'fields' => [
                    'top_strip_background_color' => ['خلفية الشريط العلوي', '#7EC8E3'],
                    'top_strip_text_color' => ['نص الشريط العلوي', '#FFFFFF'],
                    'app_bar_background_color' => ['خلفية التوب بار', '#FFFFFF'],
                    'app_bar_foreground_color' => ['نص وأيقونات التوب بار', '#1F2937'],
                    'bottom_nav_background_color' => ['خلفية النافبار السفلي', '#FFFFFF'],
                    'bottom_nav_selected_color' => ['لون العنصر المحدد', '#7EC8E3'],
                    'bottom_nav_unselected_color' => ['لون العناصر غير المحددة', '#9CA3AF'],
                ],
            ],
            'controls' => [
                'label' => 'الأزرار والحقول',
                'description' => 'ألوان الأزرار الأساسية والثانوية والحقول وحالات التعطيل.',
                'fields' => [
                    'button_primary_background_color' => ['خلفية الأزرار الرئيسية', '#7EC8E3'],
                    'button_primary_text_color' => ['نص الأزرار الرئيسية', '#FFFFFF'],
                    'button_secondary_background_color' => ['خلفية الأزرار الثانوية', '#FFFFFF'],
                    'button_secondary_text_color' => ['نص الأزرار الثانوية', '#1F2937'],
                    'input_background_color' => ['خلفية الحقول', '#FFFFFF'],
                    'border_light_color' => ['الحدود الخفيفة', '#E5E7EB'],
                    'placeholder_text_color' => ['نص الـ Placeholder', '#9CA3AF'],
                    'disabled_background_color' => ['خلفية العناصر المعطلة', '#F3F4F6'],
                    'disabled_text_color' => ['نص العناصر المعطلة', '#9CA3AF'],
                ],
            ],
            'pricing' => [
                'label' => 'الأسعار والعروض',
                'description' => 'ألوان الأسعار والخصومات والبادجات المرتبطة بالعروض.',
                'fields' => [
                    'price_regular_color' => ['لون السعر العادي', '#1F2937'],
                    'price_old_color' => ['لون السعر القديم', '#9CA3AF'],
                    'price_sale_color' => ['لون السعر المخفض', '#0F766E'],
                    'discount_badge_background_color' => ['خلفية بادج الخصم', '#FEE2E2'],
                    'discount_badge_text_color' => ['نص بادج الخصم', '#B91C1C'],
                    'offer_highlight_background_color' => ['خلفية تمييز العرض', '#EEF7FB'],
                    'offer_highlight_text_color' => ['نص تمييز العرض', '#1F2937'],
                ],
            ],
            'states' => [
                'label' => 'الحالات',
                'description' => 'ألوان الحالات العامة وحالات المنتجات والطلبات.',
                'fields' => [
                    'success_color' => ['لون النجاح', '#16A34A'],
                    'warning_color' => ['لون التحذير', '#F59E0B'],
                    'error_color' => ['لون الخطأ', '#DC2626'],
                    'info_color' => ['لون المعلومات', '#0EA5E9'],
                    'product_out_of_stock_color' => ['لون حالة نافد', '#DC2626'],
                    'product_preorder_color' => ['لون حالة حجز مسبق', '#0EA5E9'],
                    'order_pending_color' => ['لون طلب قيد الانتظار', '#F59E0B'],
                    'order_ready_color' => ['لون طلب جاهز', '#0EA5E9'],
                    'order_delivered_color' => ['لون طلب تم التوصيل', '#16A34A'],
                    'order_cancelled_color' => ['لون طلب ملغي', '#DC2626'],
                    'order_postponed_color' => ['لون طلب مؤجل', '#6B7280'],
                ],
            ],
            'helpers' => [
                'label' => 'العناصر المساعدة',
                'description' => 'ألوان القواطع والأيقونات والبادجات وطبقات الخلفية.',
                'fields' => [
                    'divider_color' => ['لون الـ Divider', '#E5E7EB'],
                    'overlay_color' => ['لون الـ Overlay', '#000000'],
                    'icon_primary_color' => ['لون الأيقونات الرئيسية', '#1F2937'],
                    'icon_secondary_color' => ['لون الأيقونات الثانوية', '#6B7280'],
                    'link_color' => ['لون الروابط', '#2563EB'],
                    'badge_background_color' => ['خلفية البادجات', '#7EC8E3'],
                    'badge_text_color' => ['نص البادجات', '#FFFFFF'],
                    'counter_badge_background_color' => ['خلفية عداد البادج', '#DC2626'],
                    'counter_badge_text_color' => ['نص عداد البادج', '#FFFFFF'],
                    'skeleton_base_color' => ['لون قاعدة الـ Skeleton', '#E5E7EB'],
                    'skeleton_highlight_color' => ['لون لمعة الـ Skeleton', '#F3F4F6'],
                ],
            ],
            'popup' => [
                'label' => 'الـ Popup والدعم',
                'description' => 'ألوان النافذة المنبثقة وزر الواتساب والدعم.',
                'fields' => [
                    'popup_background_color' => ['خلفية الـ Popup', '#FFFFFF'],
                    'popup_text_color' => ['نص الـ Popup', '#1F2937'],
                    'popup_button_background_color' => ['خلفية زر الـ Popup', '#7EC8E3'],
                    'popup_button_text_color' => ['نص زر الـ Popup', '#FFFFFF'],
                    'whatsapp_button_background_color' => ['خلفية زر واتساب', '#25D366'],
                    'whatsapp_button_icon_color' => ['لون أيقونة واتساب', '#FFFFFF'],
                ],
            ],
        ];
    }
}


if (!function_exists('nay_theme_legacy_key_map')) {
    function nay_theme_legacy_key_map(): array
    {
        return [
            'primary_color' => 'home_primary_color',
            'secondary_color' => 'home_secondary_color',
            'dark_color' => 'home_dark_color',
            'app_background_color' => 'home_background_color',
            'soft_background_color' => 'home_surface_color',
            'card_color' => 'home_card_color',
            'text_primary_color' => 'home_text_color',
            'text_secondary_color' => 'home_muted_text_color',
            'top_strip_background_color' => 'home_top_bar_background_color',
            'top_strip_text_color' => 'home_top_bar_text_color',
            'app_bar_background_color' => 'home_app_bar_background_color',
            'app_bar_foreground_color' => 'home_app_bar_foreground_color',
            'bottom_nav_background_color' => 'home_nav_background_color',
            'bottom_nav_selected_color' => 'home_nav_selected_color',
            'bottom_nav_unselected_color' => 'home_nav_unselected_color',
            'button_primary_background_color' => 'home_button_background_color',
            'button_primary_text_color' => 'home_button_text_color',
            'input_background_color' => 'home_input_background_color',
            'border_light_color' => 'home_border_color',
        ];
    }
}

if (!function_exists('nay_theme_upsert_setting')) {
    function nay_theme_upsert_setting(?mysqli $conn, string $key, string $value, string $group = 'appearance_theme'): void
    {
        if (!$conn instanceof mysqli || $key === '') {
            return;
        }

        $stmt = $conn->prepare("UPDATE settings SET setting_value = ?, setting_group = ?, updated_at = NOW() WHERE setting_key = ?");
        if ($stmt) {
            $stmt->bind_param('sss', $value, $group, $key);
            $stmt->execute();
            $updatedRows = (int)$stmt->affected_rows;
            $stmt->close();
            if ($updatedRows > 0) {
                return;
            }
        }

        $check = $conn->prepare("SELECT id FROM settings WHERE setting_key = ? ORDER BY id ASC LIMIT 1");
        if ($check) {
            $check->bind_param('s', $key);
            if ($check->execute()) {
                $res = $check->get_result();
                $row = $res ? $res->fetch_assoc() : null;
                if ($row && isset($row['id'])) {
                    $id = (int)$row['id'];
                    $check->close();

                    $stmt = $conn->prepare("UPDATE settings SET setting_value = ?, setting_group = ?, updated_at = NOW() WHERE id = ?");
                    if ($stmt) {
                        $stmt->bind_param('ssi', $value, $group, $id);
                        $stmt->execute();
                        $stmt->close();
                    }
                    return;
                }
            }
            $check->close();
        }

        $stmt = $conn->prepare("INSERT INTO settings (setting_key, setting_value, setting_group, created_at, updated_at) VALUES (?, ?, ?, NOW(), NOW())");
        if ($stmt) {
            $stmt->bind_param('sss', $key, $value, $group);
            $stmt->execute();
            $stmt->close();
        }
    }
}

if (!function_exists('nay_theme_valid_tab')) {
    function nay_theme_valid_tab(string $tab): string
    {
        $groups = nay_theme_field_groups();
        return isset($groups[$tab]) ? $tab : 'identity';
    }
}

if (!function_exists('nay_theme_ensure_settings')) {
    function nay_theme_ensure_settings(?mysqli $conn): void
    {
        if (!$conn instanceof mysqli) {
            return;
        }

        $legacyMap = nay_theme_legacy_key_map();

        foreach (nay_theme_field_groups() as $group) {
            foreach ($group['fields'] as $key => $meta) {
                $default = (string)($meta[1] ?? '');
                $stmt = $conn->prepare("INSERT INTO settings (setting_key, setting_value, setting_group, created_at, updated_at) SELECT ?, ?, 'appearance_theme', NOW(), NOW() WHERE NOT EXISTS (SELECT 1 FROM settings WHERE setting_key = ?)");
                if ($stmt) {
                    $stmt->bind_param('sss', $key, $default, $key);
                    $stmt->execute();
                    $stmt->close();
                }

                $legacyKey = (string)($legacyMap[$key] ?? '');
                if ($legacyKey !== '') {
                    $stmt = $conn->prepare("INSERT INTO settings (setting_key, setting_value, setting_group, created_at, updated_at) SELECT ?, ?, 'home', NOW(), NOW() WHERE NOT EXISTS (SELECT 1 FROM settings WHERE setting_key = ?)");
                    if ($stmt) {
                        $stmt->bind_param('sss', $legacyKey, $default, $legacyKey);
                        $stmt->execute();
                        $stmt->close();
                    }
                }
            }
        }

        nay_theme_sync_legacy_settings($conn);
    }
}


if (!function_exists('nay_theme_sync_legacy_settings')) {
    function nay_theme_sync_legacy_settings(?mysqli $conn): void
    {
        if (!$conn instanceof mysqli) {
            return;
        }

        $legacyMap = nay_theme_legacy_key_map();
        $rawKeys = array_values(array_unique(array_merge(array_keys($legacyMap), array_values($legacyMap))));
        if (!$rawKeys) {
            return;
        }

        $quoted = array_map(static fn($k) => "'" . $conn->real_escape_string($k) . "'", $rawKeys);
        $sql = 'SELECT setting_key, setting_value FROM settings WHERE setting_key IN (' . implode(',', $quoted) . ')';
        $raw = [];
        $res = $conn->query($sql);
        if ($res instanceof mysqli_result) {
            while ($row = $res->fetch_assoc()) {
                $raw[(string)$row['setting_key']] = trim((string)($row['setting_value'] ?? ''));
            }
            $res->free();
        }

        foreach (nay_theme_field_groups() as $group) {
            foreach ($group['fields'] as $key => $meta) {
                $legacyKey = (string)($legacyMap[$key] ?? '');
                if ($legacyKey === '') {
                    continue;
                }
                $default = trim((string)($meta[1] ?? ''));
                $modernValue = trim((string)($raw[$key] ?? ''));
                $legacyValue = trim((string)($raw[$legacyKey] ?? ''));
                if ($modernValue !== '' && ($legacyValue === '' || strcasecmp($legacyValue, $default) === 0)) {
                    nay_theme_upsert_setting($conn, $legacyKey, $modernValue, 'home');
                }
            }
        }
    }
}

if (!function_exists('nay_theme_get_values')) {
    function nay_theme_get_values(?mysqli $conn): array
    {
        $values = [];
        $defaults = [];
        foreach (nay_theme_field_groups() as $group) {
            foreach ($group['fields'] as $key => $meta) {
                $defaults[$key] = (string)($meta[1] ?? '');
                $values[$key] = $defaults[$key];
            }
        }
        if (!$conn instanceof mysqli) {
            return $values;
        }

        $legacyMap = nay_theme_legacy_key_map();
        $keys = array_keys($values);
        foreach ($legacyMap as $legacyKey) {
            $keys[] = $legacyKey;
        }
        $keys = array_values(array_unique($keys));
        if (!$keys) {
            return $values;
        }

        $quoted = array_map(static fn($k) => "'" . $conn->real_escape_string($k) . "'", $keys);
        $sql = 'SELECT setting_key, setting_value FROM settings WHERE setting_key IN (' . implode(',', $quoted) . ')';
        $raw = [];
        $res = $conn->query($sql);
        if ($res instanceof mysqli_result) {
            while ($row = $res->fetch_assoc()) {
                $raw[(string)$row['setting_key']] = (string)($row['setting_value'] ?? '');
            }
            $res->free();
        }

        foreach ($values as $key => $default) {
            $modernValue = trim((string)($raw[$key] ?? ''));
            $legacyKey = (string)($legacyMap[$key] ?? '');
            $legacyValue = $legacyKey !== '' ? trim((string)($raw[$legacyKey] ?? '')) : '';

            if ($legacyValue !== '' && ($modernValue === '' || strcasecmp($modernValue, (string)$default) === 0)) {
                $values[$key] = $legacyValue;
            } elseif ($modernValue !== '') {
                $values[$key] = $modernValue;
            }
        }

        return $values;
    }
}

if (!function_exists('nay_theme_save_group')) {
    function nay_theme_save_group(?mysqli $conn, string $tab, array $post): array
    {
        if (!$conn instanceof mysqli) {
            return ['ok' => false, 'message' => 'تعذر الوصول إلى قاعدة البيانات.'];
        }
        $groups = nay_theme_field_groups();
        if (!isset($groups[$tab])) {
            return ['ok' => false, 'message' => 'التبويب المطلوب غير صالح.'];
        }

        $legacyMap = nay_theme_legacy_key_map();

        foreach ($groups[$tab]['fields'] as $key => $meta) {
            $raw = (string)($post[$key] ?? '');
            $value = nay_theme_normalize_hex($raw);
            if ($value === '' && trim($raw) !== '') {
                return ['ok' => false, 'message' => 'صيغة اللون غير صحيحة في الحقل: ' . (string)$meta[0]];
            }

            nay_theme_upsert_setting($conn, $key, $value, 'appearance_theme');

            $legacyKey = (string)($legacyMap[$key] ?? '');
            if ($legacyKey !== '') {
                nay_theme_upsert_setting($conn, $legacyKey, $value, 'home');
            }
        }
        return ['ok' => true, 'message' => 'تم حفظ ألوان التبويب بنجاح وانعكاسها على مفاتيح الواجهة الحالية.'];
    }
}

if (!function_exists('nay_theme_render_field')) {
    function nay_theme_render_field(string $key, string $label, string $value): string
    {
        $safeKey = nay_theme_escape($key);
        $safeLabel = nay_theme_escape($label);
        $safeValue = nay_theme_escape($value ?: '#000000');
        $displayValue = nay_theme_escape($value);
        return <<<HTML
<div class="theme-field-card">
    <label for="{$safeKey}" class="theme-label">{$safeLabel}</label>
    <div class="theme-input-row">
        <input type="color" id="{$safeKey}_picker" value="{$safeValue}" class="theme-color-picker" oninput="document.getElementById('{$safeKey}').value = this.value.toUpperCase(); document.getElementById('{$safeKey}_preview').style.background = this.value;" />
        <input type="text" id="{$safeKey}" name="{$safeKey}" value="{$displayValue}" placeholder="#AABBCC" class="theme-hex-input" oninput="document.getElementById('{$safeKey}_preview').style.background = this.value || '#000000'; try{document.getElementById('{$safeKey}_picker').value=this.value}catch(e){}" />
        <span id="{$safeKey}_preview" class="theme-preview" style="background: {$safeValue};"></span>
    </div>
</div>
HTML;
    }
}
