<?php
use EasyChat\View\HtmxFragmentRenderer;
use EasyChat\View\SettingFragments;

echo easychat_style_tag('css/views/setting_copilot.css');

$chat_ai_provider_options = [
    'easytokens' => [
        'label' => 'EasyTokens - НашаНейросеть',
        'badges' => ['Без VPN', 'Удобная оплата'],
        'default_model' => 'easylite',
        'placeholder' => 'easylite',
    ],
    'gemini' => [
        'label' => 'Google Gemini API',
        'badges' => [],
        'default_model' => 'gemini-3.5-flash',
        'placeholder' => 'gemini-3.5-flash',
    ],
    'openai' => [
        'label' => 'OpenAI API (ChatGPT)',
        'badges' => [],
        'default_model' => 'gpt-4o-mini',
        'placeholder' => 'gpt-4o-mini или o4-mini',
    ],
];
$chat_ai_provider_default_models = array_map(static function ($option) {
    return (string)$option['default_model'];
}, $chat_ai_provider_options);
$effective_ai_provider = isset($chat_ai_provider_options[$chat_ai_provider ?? ''])
    ? (string)$chat_ai_provider
    : 'easytokens';
$is_easytokens_provider = ($effective_ai_provider === 'easytokens');
$effective_ai_model = trim((string)($chat_ai_model ?? ''));
if ($is_easytokens_provider) {
    $effective_ai_model = preg_match('/^[A-Za-z0-9][A-Za-z0-9._:-]{0,127}$/', $effective_ai_model)
        ? $effective_ai_model
        : $chat_ai_provider_options['easytokens']['default_model'];
} elseif ($effective_ai_provider === 'gemini') {
    if (stripos($effective_ai_model, 'models/') === 0) {
        $effective_ai_model = substr($effective_ai_model, 7);
    }
    $effective_ai_model = (strpos(strtolower($effective_ai_model), 'gemini-') === 0)
        ? $effective_ai_model
        : $chat_ai_provider_options['gemini']['default_model'];
} elseif ($effective_ai_provider === 'openai') {
    $lower_ai_model = strtolower($effective_ai_model);
    $effective_ai_model = ($effective_ai_model !== '' && $lower_ai_model !== 'easylite' && strpos($lower_ai_model, 'gemini-') !== 0)
        ? $effective_ai_model
        : $chat_ai_provider_options['openai']['default_model'];
}
$chat_ai_provider_label = $chat_ai_provider_options[$effective_ai_provider]['label'];
$chat_ai_provider_badges = $chat_ai_provider_options[$effective_ai_provider]['badges'];
$chat_ai_model_placeholder = $chat_ai_provider_options[$effective_ai_provider]['placeholder'];
$chat_easytokens_gift_status = isset($chat_easytokens_gift_status) ? (string)$chat_easytokens_gift_status : '';
$chat_easytokens_gift_offer_seen = isset($chat_easytokens_gift_offer_seen) ? (string)$chat_easytokens_gift_offer_seen : '0';
$chat_easytokens_gift_email = isset($chat_easytokens_gift_email) ? (string)$chat_easytokens_gift_email : '';
$easychat_gift_email_value = trim($chat_easytokens_gift_email) !== '' ? trim($chat_easytokens_gift_email) : trim((string)($chat_widget_email ?? ''));
$chat_easytokens_model = $is_easytokens_provider ? $effective_ai_model : $chat_ai_provider_options['easytokens']['default_model'];
$proxy_route_groups = is_array($proxy_route_groups ?? null) ? $proxy_route_groups : [];
$proxy_route_profiles = is_array($proxy_route_profiles ?? null) ? $proxy_route_profiles : [];
$proxy_route_states = is_array($proxy_route_states ?? null) ? $proxy_route_states : [];
$chat_proxy_routes_json = isset($chat_proxy_routes_json) ? (string)$chat_proxy_routes_json : '{}';
$chat_proxy_password_saved = !empty($chat_proxy_password_saved);
$catalog_capability = is_array($catalog_capability ?? null) ? $catalog_capability : ['ready' => false, 'reason' => 'catalog_not_checked'];
$catalog_ready = !empty($catalog_capability['ready']);
$catalog_search_enabled = in_array((string)($chat_productsearch ?? '0'), ['1', '2', '3'], true);
$catalog_semantic_enabled = (string)($chat_cms_semantic_enabled ?? '0') === '1'
    || in_array((string)($chat_productsearch ?? '0'), ['1', '3'], true);
$catalog_policy = in_array((string)($chat_cms_availability_policy ?? 'smart'), ['smart', 'in_stock', 'all_active'], true)
    ? (string)$chat_cms_availability_policy
    : 'smart';
$easychat_proxy_badge = static function ($profile) use ($proxy_route_states) {
    $state = is_array($proxy_route_states[$profile] ?? null) ? $proxy_route_states[$profile] : [];
    $class = (string)($state['class'] ?? 'bg-light text-secondary border');
    $icon = (string)($state['icon'] ?? 'fa-random');
    $label = (string)($state['label'] ?? 'Напрямую');
    return '<button type="button" class="btn btn-sm proxy-route-jump p-0 border-0 bg-transparent" data-proxy-focus="' . htmlspecialchars($profile, ENT_QUOTES, 'UTF-8') . '" title="Открыть настройку маршрута proxy">' .
        '<span class="badge ' . htmlspecialchars($class, ENT_QUOTES, 'UTF-8') . ' px-2 py-1" style="font-size: 11px;">' .
        '<i class="fa ' . htmlspecialchars($icon, ENT_QUOTES, 'UTF-8') . ' me-1"></i>' . htmlspecialchars($label, ENT_QUOTES, 'UTF-8') .
        '</span></button>';
};
$easychat_channel_profile_url = static function ($provider, $username = '', $user_id = '', $profile_url = '') {
    $provider = strtolower(trim((string)$provider));
    $username = ltrim(trim((string)$username), '@');
    $user_id = trim((string)$user_id);
    $profile_url = trim((string)$profile_url);

    if ($provider === 'max' || $provider === 'max-bot') {
        return preg_match('/^[A-Za-z0-9_.-]{1,64}$/', $username) ? 'https://max.ru/u/' . $username : '';
    }
    if ($provider === 'telegram') {
        return preg_match('/^[A-Za-z0-9_]{5,32}$/', $username) ? 'https://t.me/' . $username : '';
    }
    if ($provider === 'vk') {
        if (preg_match('/^[A-Za-z0-9_.]{3,64}$/', $username)) {
            return 'https://vk.com/' . $username;
        }
        return preg_match('/^\d+$/', $user_id) ? 'https://vk.com/club' . $user_id : '';
    }
    if ($provider === 'avito' && $profile_url !== '') {
        $parts = parse_url($profile_url);
        $host = is_array($parts) ? strtolower((string)($parts['host'] ?? '')) : '';
        $scheme = is_array($parts) ? strtolower((string)($parts['scheme'] ?? '')) : '';
        return ($scheme === 'https' && in_array($host, ['avito.ru', 'www.avito.ru'], true)) ? $profile_url : '';
    }

    return '';
};
$easychat_channel_identity = static function ($provider, $label, $username = '', $user_id = '', $profile_url = '') use ($easychat_channel_profile_url) {
    $label = trim((string)$label);
    if ($label === '') {
        return '';
    }

    $safe_label = htmlspecialchars($label, ENT_QUOTES, 'UTF-8');
    $url = $easychat_channel_profile_url($provider, $username, $user_id, $profile_url);
    if ($url === '') {
        return $safe_label;
    }

    return '<a class="easychat-channel-link" href="' . htmlspecialchars($url, ENT_QUOTES, 'UTF-8') . '" target="_blank" rel="noopener noreferrer" title="Открыть канал в новой вкладке">' .
        $safe_label . '<i class="fa fa-external-link ms-1" aria-hidden="true"></i></a>';
};
?>
<?php echo easychat_style_tag('css/views/setting_catalog.css'); ?>
<?php echo easychat_style_tag('css/views/setting_scheduler.css'); ?>
<div class="card border-0 shadow-sm rounded-4 p-4" style="background: #ffffff;">
    
    <div class="d-flex justify-content-between align-items-center mb-4 border-bottom pb-3">
        <div>
            <h4 class="fw-bold text-dark mb-1" style="font-family: 'Outfit', sans-serif;"><i class="fa fa-sliders me-2 text-primary"></i> Настройки</h4>
            <p class="text-muted small mb-0">Управление параметрами виджета чата, ИИ консультантом, и сессиями мобильного приложения</p>
        </div>
    </div>

    <!-- Alert Notifications -->
    <div id="settings-alert" class="alert d-none mb-4 p-3 animate__animated animate__fadeIn" style="border-radius: 10px; font-size: 14px;"></div>

    <!-- Bootstrap Nav Tabs -->
    <ul class="nav nav-pills mb-4 gap-2" id="settingsTabs" role="tablist">
        <li class="nav-item" role="presentation">
            <button class="btn btn-light active px-3 py-2 text-dark" id="general-tab" data-bs-toggle="tab" data-bs-target="#general-panel" type="button" role="tab" style="border-radius: 8px; font-size: 13px; font-weight: 500;">
                <i class="fa fa-cog me-2"></i> Общие
            </button>
        </li>
        <li class="nav-item" role="presentation">
            <button class="btn btn-light px-3 py-2 text-dark" id="widgetcode-tab" data-bs-toggle="tab" data-bs-target="#widgetcode-panel" type="button" role="tab" style="border-radius: 8px; font-size: 13px; font-weight: 500;">
                <i class="fa fa-code me-2 text-primary"></i> Код виджета
            </button>
        </li>
        <li class="nav-item" role="presentation">
            <button class="btn btn-light px-3 py-2 text-dark" id="app-tab" data-bs-toggle="tab" data-bs-target="#app-panel" type="button" role="tab" style="border-radius: 8px; font-size: 13px; font-weight: 500;">
                <i class="fa fa-android me-2"></i> Мобильное приложение
            </button>
        </li>


        <li class="nav-item" role="presentation">
            <button class="btn btn-light px-3 py-2 text-dark" id="ai-tab" data-bs-toggle="tab" data-bs-target="#ai-panel" type="button" role="tab" style="border-radius: 8px; font-size: 13px; font-weight: 500;">
                <i class="fa fa-android me-2 text-info"></i> ИИ Консультант
            </button>
        </li>
        <li class="nav-item" role="presentation">
            <button class="btn btn-light px-3 py-2 text-dark" id="cms-tab" data-bs-toggle="tab" data-bs-target="#cms-panel" type="button" role="tab" style="border-radius: 8px; font-size: 13px; font-weight: 500;">
                <i class="fa fa-database me-2 text-success"></i> Каталог и поиск
            </button>
        </li>
        <li class="nav-item" role="presentation">
            <button class="btn btn-light px-3 py-2 text-dark" id="proxy-tab" data-bs-toggle="tab" data-bs-target="#proxy-panel" type="button" role="tab" style="border-radius: 8px; font-size: 13px; font-weight: 500;">
                <i class="fa fa-shield me-2 text-secondary"></i> Прокси
            </button>
        </li>
        <li class="nav-item" role="presentation">
            <button class="btn btn-light px-3 py-2 text-dark" id="security-tab" data-bs-toggle="tab" data-bs-target="#security-panel" type="button" role="tab" style="border-radius: 8px; font-size: 13px; font-weight: 500;">
                <i class="fa fa-shield me-2 text-danger"></i> <?php echo htmlspecialchars(easychat_t('settings.security_title', [], $easychat_locale ?? 'ru')); ?>
            </button>
        </li>
        <li class="nav-item" role="presentation">
            <button class="btn btn-light px-3 py-2 text-dark" id="cron-tab" data-bs-toggle="tab" data-bs-target="#cron-panel" type="button" role="tab" style="border-radius: 8px; font-size: 13px; font-weight: 500;">
                <i class="fa fa-clock-o me-2 text-warning"></i> <?php echo htmlspecialchars(easychat_t('settings.cron_title', [], $easychat_locale ?? 'ru')); ?>
            </button>
        </li>
    </ul>

    <!-- Settings Form -->
    <form id="settings-form">
        <input type="hidden" id="easychat-settings-nonce" name="settings_nonce" value="<?php echo htmlspecialchars($easychat_settings_nonce ?? ''); ?>">
        <input type="hidden" id="easychat-settings-revision" name="settings_revision" value="<?php echo max(0, (int)($chat_settings_revision ?? 0)); ?>">
        <div class="tab-content" id="settingsTabContent">
            
            <!-- PANEL 1: GENERAL SETTINGS -->
            <div class="tab-pane fade show active animate__animated animate__fadeIn" id="general-panel" role="tabpanel">
                <h5 class="fw-bold text-dark mb-4" style="font-family: 'Outfit', sans-serif;">Общие параметры виджета</h5>

                <div class="mb-4 p-4 bg-light rounded-4" style="border: 1px solid #e2e8f0;">
                    <?php $locale_label_keys = ['ru' => 'common.russian', 'en' => 'common.english', 'kk' => 'common.kazakh', 'uz' => 'common.uzbek', 'uk' => 'common.ukrainian', 'es' => 'common.spanish']; ?>
                    <h6 class="fw-bold text-dark mb-3" style="font-family:'Outfit',sans-serif;">
                        <i class="fa fa-language text-primary me-2"></i><?php echo htmlspecialchars(easychat_t('settings.localization_title', [], $easychat_locale ?? 'ru')); ?>
                    </h6>
                    <div class="row">
                        <div class="col-md-4 mb-3">
                            <label class="form-label text-muted small"><?php echo htmlspecialchars(easychat_t('settings.admin_locale', [], $easychat_locale ?? 'ru')); ?></label>
                            <select name="chat_admin_locale" class="form-select" style="border-radius: 8px; height: 38px;">
                                <?php foreach (($easychat_supported_locales ?? ['ru']) as $locale_code): ?>
                                    <?php $label_key = $locale_label_keys[$locale_code] ?? 'common.language'; ?>
                                    <option value="<?php echo $locale_code; ?>" <?php echo (($chat_admin_locale ?? 'ru') === $locale_code) ? 'selected' : ''; ?>><?php echo htmlspecialchars(easychat_t($label_key, [], $locale_code)); ?></option>
                                <?php endforeach; ?>
                            </select>
                        </div>
                        <div class="col-md-4 mb-3">
                            <label class="form-label text-muted small"><?php echo htmlspecialchars(easychat_t('settings.widget_locale', [], $easychat_locale ?? 'ru')); ?></label>
                            <select name="chat_widget_locale" class="form-select" style="border-radius: 8px; height: 38px;">
                                <?php foreach (($easychat_supported_locales ?? ['ru']) as $locale_code): ?>
                                    <?php $label_key = $locale_label_keys[$locale_code] ?? 'common.language'; ?>
                                    <option value="<?php echo $locale_code; ?>" <?php echo (($chat_widget_locale ?? 'ru') === $locale_code) ? 'selected' : ''; ?>><?php echo htmlspecialchars(easychat_t($label_key, [], $locale_code)); ?></option>
                                <?php endforeach; ?>
                            </select>
                        </div>
                        <div class="col-md-12 mb-3 d-flex align-items-end">
                            <div class="form-check form-switch">
                                <input class="form-check-input" type="checkbox" name="chat_widget_locale_auto" value="1" id="chat-widget-locale-auto" <?php echo (($chat_widget_locale_auto ?? '1') == '1') ? 'checked' : ''; ?> style="width: 42px; height: 21px; cursor: pointer;">
                                <label class="form-check-label text-secondary small ms-2 pt-1" for="chat-widget-locale-auto">
                                    <?php echo htmlspecialchars(easychat_t('settings.widget_locale_auto', [], $easychat_locale ?? 'ru')); ?>
                                </label>
                            </div>
                        </div>
                    </div>
                </div>
                
                <div class="mb-4">
                    <label class="form-label text-muted small d-block">Статус чата на сайте</label>
                    <div class="form-check form-switch">
                        <input class="form-check-input" type="checkbox" name="chat_status" value="1" id="chat-status" <?php echo ($chat_status == '1') ? 'checked' : ''; ?> style="width: 48px; height: 24px; cursor: pointer;">
                        <label class="form-check-label text-secondary small ms-2 pt-1" for="chat-status">Показывать виджет чата для посетителей сайта</label>
                        <div class="text-muted small mt-2 ms-1">
                            <?php if (($cms_edition ?? 'standalone') === 'standalone'): ?>
                                Управляет кодом виджета EasyChat в Generic-установке.
                            <?php else: ?>
                                Это единая настройка, синхронизированная с модулем <?php echo htmlspecialchars($cms_edition_label ?? 'CMS'); ?>.
                            <?php endif; ?>
                        </div>
                    </div>
                </div>

                <div class="row">
                    <div class="col-md-3 mb-3">
                        <label class="form-label text-muted small">Основной цвет виджета (HEX)</label>
                        <div class="input-group">
                            <input type="color" class="form-control-color bg-transparent border-0 p-0 me-2" name="chat_widget_color" value="<?php echo htmlspecialchars($chat_widget_color); ?>" style="width: 42px; height: 38px; cursor: pointer;">
                            <input type="text" id="widget-color-text" class="form-control" value="<?php echo htmlspecialchars($chat_widget_color); ?>" style="border-radius: 8px;" placeholder="#6366f1">
                        </div>
                    </div>
                    <div class="col-md-3 mb-3">
                        <label class="form-label text-muted small">Тема виджета</label>
                        <select name="chat_widget_theme" class="form-select" style="border-radius: 8px; height: 38px; cursor: pointer;">
                            <option value="light" <?php echo ($chat_widget_theme == 'light') ? 'selected' : ''; ?>>Светлая тема</option>
                            <option value="dark" <?php echo ($chat_widget_theme == 'dark') ? 'selected' : ''; ?>>Тёмная тема</option>
                        </select>
                    </div>
                    <div class="col-md-3 mb-3">
                        <label class="form-label text-muted small" for="chat-on-accent-mode">Текст на акценте</label>
                        <select name="chat_on_accent_mode" id="chat-on-accent-mode" class="form-select" aria-describedby="easychat-theme-contrast-result" style="border-radius: 8px; height: 38px; cursor: pointer;">
                            <option value="auto" <?php echo (($chat_on_accent_mode ?? 'auto') === 'auto') ? 'selected' : ''; ?>>Автоматически</option>
                            <option value="light" <?php echo (($chat_on_accent_mode ?? 'auto') === 'light') ? 'selected' : ''; ?>>Светлый</option>
                            <option value="dark" <?php echo (($chat_on_accent_mode ?? 'auto') === 'dark') ? 'selected' : ''; ?>>Тёмный</option>
                        </select>
                    </div>
                    <div class="col-md-3 mb-3">
                        <label class="form-label text-muted small">Максимальный размер файла (МБ)</label>
                        <input type="number" class="form-control" name="chat_max_file_size" value="<?php echo htmlspecialchars($chat_max_file_size); ?>" min="1" max="100" style="border-radius: 8px; height: 38px;" required>
                    </div>
                </div>
                <div class="easychat-theme-preview mb-4" id="easychat-theme-preview" role="status" aria-live="polite">
                    <span class="easychat-theme-preview__label">Предпросмотр</span>
                    <button type="button" class="easychat-theme-preview__button">Новый диалог</button>
                    <span class="easychat-theme-preview__badge">12</span>
                    <span class="easychat-theme-preview__bubble">Ответ оператора</span>
                    <small id="easychat-theme-contrast-result">Контраст рассчитывается автоматически</small>
                </div>

                <div class="mb-4 p-4 bg-light rounded-4" style="border: 1px solid #e2e8f0;">
                    <h6 class="fw-bold text-dark mb-3" style="font-family:'Outfit',sans-serif;">
                        <i class="fa fa-location-arrow text-primary me-2"></i>Положение виджета
                    </h6>
                    <div class="row align-items-end">
                        <div class="col-md-4 mb-3">
                            <label class="form-label text-muted small">Сторона экрана</label>
                            <select name="chat_widget_position" class="form-select" style="border-radius: 8px; height: 38px; cursor: pointer;">
                                <option value="right" <?php echo (($chat_widget_position ?? 'right') === 'right') ? 'selected' : ''; ?>>Справа снизу</option>
                                <option value="left" <?php echo (($chat_widget_position ?? 'right') === 'left') ? 'selected' : ''; ?>>Слева снизу</option>
                            </select>
                        </div>
                        <div class="col-md-4 mb-3">
                            <label class="form-label text-muted small">Отступ от края, px</label>
                            <input type="number" class="form-control" name="chat_widget_offset_x" value="<?php echo htmlspecialchars($chat_widget_offset_x ?? '20'); ?>" min="0" max="200" step="1" style="border-radius: 8px; height: 38px;" required>
                        </div>
                        <div class="col-md-4 mb-3">
                            <label class="form-label text-muted small">Отступ снизу, px</label>
                            <input type="number" class="form-control" name="chat_widget_offset_y" value="<?php echo htmlspecialchars($chat_widget_offset_y ?? '20'); ?>" min="0" max="200" step="1" style="border-radius: 8px; height: 38px;" required>
                        </div>
                    </div>
                    <div class="form-text small text-muted">На телефонах открытое окно чата остается на весь экран; эти настройки управляют положением кнопки.</div>
                </div>

                <div class="row">
                    <div class="col-md-6 mb-3">
                        <label class="form-label text-muted small">Приветственное сообщение (Welcome greeting)</label>
                        <input type="text" class="form-control" name="chat_widget_welcome" value="<?php echo htmlspecialchars($chat_widget_welcome); ?>" required style="border-radius: 8px; height: 38px;">
                    </div>
                    <div class="col-md-6 mb-3">
                        <label class="form-label text-muted small">API-ключ Dadata (Геолокация по IP)</label>
                        <input type="text" class="form-control" name="chat_dadata_token" value="<?php echo htmlspecialchars($chat_dadata_token ?? ''); ?>" placeholder="Введите Token Dadata" style="border-radius: 8px; height: 38px;">
                    </div>
                </div>



                <hr class="my-4" style="border-color: #f1f5f9;">

                <h5 class="fw-bold text-dark mb-3" style="font-family: 'Outfit', sans-serif;">Карточка клиента в диалогах (Веб-админка и Android)</h5>
                <p class="text-muted small mb-4">Управляйте отображением дополнительных блоков в правой колонке диалогов на ПК и в карточке клиента в Android-приложении.</p>

                <div class="form-check form-switch mb-3">
                    <input class="form-check-input easychat-switch-md" type="checkbox" name="chat_dialog_tags_status" value="1" id="chat-dialog-tags-status" <?php echo (($chat_dialog_tags_status ?? '1') == '1') ? 'checked' : ''; ?>>
                    <label class="form-check-label text-muted small fw-semibold ms-2 pt-1" for="chat-dialog-tags-status">
                        Отображать «Теги диалога»
                    </label>
                    <div class="form-text small text-muted ms-2">Показывать блок тегов в правой колонке окна диалога на ПК и в карточке клиента в Android-приложении.</div>
                </div>

                <div class="form-check form-switch mb-4">
                    <input class="form-check-input easychat-switch-md" type="checkbox" name="chat_dialog_notes_status" value="1" id="chat-dialog-notes-status" <?php echo (($chat_dialog_notes_status ?? '1') == '1') ? 'checked' : ''; ?>>
                    <label class="form-check-label text-muted small fw-semibold ms-2 pt-1" for="chat-dialog-notes-status">
                        Отображать «Внутренние заметки»
                    </label>
                    <div class="form-text small text-muted ms-2">Показывать блок внутренних заметок операторов в правой колонке на ПК и в Android-приложении.</div>
                </div>

                <hr class="my-4" style="border-color: #f1f5f9;">
                
                <h5 class="fw-bold text-dark mb-3" style="font-family: 'Outfit', sans-serif;">Кастомизация заголовка и контактов виджета</h5>
                <p class="text-muted small mb-4">Настройте заголовок, вспомогательный текст и кнопки быстрых контактов (телефон, мессенджеры, почта) в шапке и подвале виджета.</p>

                <div class="row">
                    <div class="col-12 mb-3">
                        <label class="form-label text-muted small fw-semibold">Заголовок виджета</label>
                        <input type="text" class="form-control" name="chat_widget_title" value="<?php echo htmlspecialchars($chat_widget_title); ?>" style="border-radius: 8px;">
                    </div>
                </div>

                <div class="mb-3">
                    <label class="form-label text-muted small fw-semibold">Информационный текст в подвале</label>
                    <textarea class="form-control" name="chat_widget_text" rows="2" style="border-radius: 8px;"><?php echo htmlspecialchars($chat_widget_text); ?></textarea>
                    <div class="form-text small text-muted">Выводится над кнопками соцсетей.</div>
                </div>

                <div class="form-check form-switch mb-3">
                    <input class="form-check-input easychat-switch-md" type="checkbox" name="chat_widget_show_operators" value="1" id="chat-widget-show-operators" <?php echo (($chat_widget_show_operators ?? '1') == '1') ? 'checked' : ''; ?>>
                    <label class="form-check-label text-muted small fw-semibold ms-2" for="chat-widget-show-operators" style="cursor: pointer; padding-top: 2px;">
                        Отображать операторов в шапке виджета
                    </label>
                    <div class="form-text small text-muted ms-2">Показывать аватарки и статус онлайн операторов в приветственной карточке виджета. Отключите, если работает один оператор или не требуется блок с операторами.</div>
                </div>

                <div class="form-check form-switch mb-4">
                    <input class="form-check-input" type="checkbox" name="chat_widget_social_hover" value="1" id="chat-widget-social-hover" <?php echo (($chat_widget_social_hover ?? '1') == '1') ? 'checked' : ''; ?> style="width: 42px; height: 21px; cursor: pointer;">
                    <label class="form-check-label text-muted small fw-semibold ms-2" for="chat-widget-social-hover" style="cursor: pointer; padding-top: 2px;">
                        Отображать быстрые каналы связи при наведении на кнопку чата
                    </label>
                    <div class="form-text small text-muted ms-2">Мессенджеры и телефон плавно появятся над кнопкой чата при наведении курсора на десктопах.</div>
                </div>

                <div class="row">
                    <div class="col-md-6 mb-3">
                        <label class="form-label text-muted small fw-semibold">Телефон для звонка (только цифры/знаки)</label>
                        <input type="text" class="form-control" name="chat_widget_phone" value="<?php echo htmlspecialchars($chat_widget_phone); ?>" style="border-radius: 8px;" placeholder="88002222555">
                    </div>
                    <div class="col-md-6 mb-3">
                        <label class="form-label text-muted small fw-semibold">Ссылка WhatsApp / Viber</label>
                        <input type="text" class="form-control" name="chat_widget_whatsapp" value="<?php echo htmlspecialchars($chat_widget_whatsapp); ?>" style="border-radius: 8px;" placeholder="https://wa.me/79001234567">
                    </div>
                </div>

                <div class="row">
                    <div class="col-md-6 mb-3">
                        <label class="form-label text-muted small fw-semibold">Адрес Email</label>
                        <input type="text" class="form-control" name="chat_widget_email" value="<?php echo htmlspecialchars($chat_widget_email); ?>" style="border-radius: 8px;" placeholder="info@domain.com">
                    </div>
                    <div class="col-md-6 mb-3">
                        <label class="form-label text-muted small fw-semibold">Ссылка Telegram</label>
                        <input type="text" class="form-control" name="chat_widget_telegram" value="<?php echo htmlspecialchars($chat_widget_telegram); ?>" style="border-radius: 8px;" placeholder="https://t.me/username">
                    </div>
                </div>

                <div class="row">
                    <div class="col-md-6 mb-3">
                        <label class="form-label text-muted small fw-semibold">Ссылка на мессенджер МАКС</label>
                        <input type="text" class="form-control" name="chat_widget_max" value="<?php echo htmlspecialchars($chat_widget_max); ?>" style="border-radius: 8px;" placeholder="Ссылка на ваш канал/профиль в МАКС">
                    </div>
                    <div class="col-md-6 mb-3">
                        <label class="form-label text-muted small fw-semibold">Ссылка VK (ВКонтакте)</label>
                        <input type="text" class="form-control" name="chat_widget_vk" value="<?php echo htmlspecialchars($chat_widget_vk); ?>" style="border-radius: 8px;" placeholder="https://vk.com/username_or_community">
                    </div>
                </div>
            </div>

            <!-- PANEL: WIDGET CODE -->
            <div class="tab-pane fade animate__animated animate__fadeIn" id="widgetcode-panel" role="tabpanel">
                <h5 class="fw-bold text-dark mb-3" style="font-family: 'Outfit', sans-serif;">Установка виджета чата на сайт</h5>
                <p class="text-muted small mb-4">Для того чтобы на вашем сайте появился виджет онлайн-консультанта, скопируйте код ниже и установите его на все страницы вашего веб-сайта.</p>
                
                <!-- Code Box -->
                <div class="mb-4">
                    <label class="form-label text-muted small d-block">Код для интеграции</label>
                    <div class="position-relative">
                        <pre class="bg-dark text-light p-4 rounded-4 small mb-0" style="font-family: 'Courier New', Courier, monospace; overflow-x: auto; background-color: #0b0f19 !important; border: 1px solid rgba(255,255,255,0.05);"><code id="widget-code-text">&lt;!-- EasyChat Self-Hosted Widget --&gt;
&lt;script src="<?php echo HTTP_SERVER; ?>index.php?route=widget" async&gt;&lt;/script&gt;</code></pre>
                        <button type="button" class="btn btn-primary btn-sm position-absolute" id="btn-copy-code" style="top: 15px; right: 15px; border-radius: 8px; background: linear-gradient(135deg, #6366f1, #a855f7) !important; border: none;">
                            <i class="fa fa-copy me-1"></i> Копировать
                        </button>
                    </div>
                </div>

                <!-- Detailed Instructions -->
                <div class="p-4 bg-light rounded-4 mb-3" style="border: 1px solid #e2e8f0;">
                    <h6 class="fw-bold text-dark mb-3"><i class="fa fa-info-circle text-primary me-2"></i>Инструкция по установке</h6>
                    
                    <ul class="text-secondary small ps-3 mb-0" style="line-height: 1.6;">
                        <li class="mb-2"><b>Куда вставлять:</b> Вставьте этот код в файл разметки вашего сайта (обычно это <code>header.php</code>, <code>footer.php</code> или файл шаблона <code>index.html</code>) прямо перед закрывающим тегом <code>&lt;/body&gt;</code>.</li>
                        <li class="mb-2"><b>Для любой CMS:</b> Если вы используете CMS (WordPress, OpenCart, Bitrix и др.), вы можете добавить код через панель управления в настройки шаблона/дизайна в поле для «Пользовательского JS / Скриптов в подвале».</li>
                        <li class="mb-2"><b>Асинхронность:</b> Атрибут <code>async</code> гарантирует, что виджет будет загружаться в фоновом режиме и никак не повлияет на скорость загрузки и производительность вашего основного сайта.</li>
                        <li><b>Проверка статуса:</b> Убедитесь, что на вкладке «Общие» включен статус «Показывать виджет чата для посетителей сайта».</li>
                    </ul>
                </div>

                <!-- Domain Placement Warning Info -->
                <div class="alert alert-warning p-4 mb-3 d-block" style="display: block !important; border-radius: 12px; font-size: 13.5px; border: 1px solid rgba(245, 158, 11, 0.25); background-color: rgba(245, 158, 11, 0.05); color: #92400e; line-height: 1.6;">
                    <h6 class="fw-bold mb-2 text-dark" style="font-family: 'Outfit', sans-serif;"><i class="fa fa-exclamation-triangle text-warning me-2"></i> Важное ограничение: Базовый домен виджета</h6>
                    <p class="mb-2">Админка лицензируется на домен установки (<b><?php echo htmlspecialchars($chat_widget_install_host ?? (\EasyChat\Library\RequestContext::server()['HTTP_HOST'] ?? 'localhost')); ?></b>). Клиентский виджет разрешен только на базовом домене <b><?php echo htmlspecialchars($chat_widget_base_domain ?? 'localhost'); ?></b> и его поддоменах.</p>
                    <ul class="mb-0 ps-3">
                        <li class="mb-2"><b>Безопасное правило:</b> если EasyChat установлен на <code>admin.example.ru</code>, виджет работает на <code>admin.example.ru</code> и <code>*.admin.example.ru</code>, но не на <code>shop.example.ru</code>.</li>
                        <li><b>Расширение домена:</b> если нужен показ на <code>example.ru</code> и всех его поддоменах, базовый домен меняется через поддержку после проверки владения доменом.</li>
                    </ul>
                </div>
            </div>

            <!-- PANEL 2: MOBILE APPLICATION SETTINGS -->
            <div class="tab-pane fade animate__animated animate__fadeIn" id="app-panel" role="tabpanel">
                <h5 class="fw-bold text-dark mb-3" style="font-family: 'Outfit', sans-serif;">Вход в мобильное приложение</h5>
                <p class="text-muted small">Сканируйте QR-код из официального Android-клиента, чтобы мгновенно подключить устройство под вашей учетной записью администратора.</p>
                <div class="mb-4 p-4 bg-light rounded-4" style="border: 1px solid #e2e8f0;">
                    <label class="form-label text-muted small fw-bold">Домен транзитного сервера (Push Gateway)</label>
                    <input type="text" class="form-control bg-white" id="chat-central-api" name="chat_central_api" value="<?php echo htmlspecialchars($chat_central_api); ?>" placeholder="https://api.easychat24.ru" style="border-radius: 8px;">
                    <div id="chat-central-api-feedback" class="invalid-feedback">Укажите HTTPS URL центрального API, например https://api.easychat24.ru.</div>
                    <span class="d-block text-muted mt-2" style="font-size: 11px;"><i class="fa fa-info-circle me-1"></i> Обязателен при включенных push-уведомлениях. Служит для защищенной регистрации устройств и ретрансляции push-сигналов.</span>
                    <a class="btn btn-sm btn-outline-primary mt-3" href="index.php?route=notification_health" data-easychat-shell-route="notification_health">
                        <i class="fa fa-bell-o me-1" aria-hidden="true"></i>Открыть уведомления
                    </a>
                </div>
                <div class="mb-4 p-4 bg-light rounded-4" style="border: 1px solid #e2e8f0;">
                    <h6 class="fw-bold text-dark mb-3"><i class="fa fa-file-text-o text-secondary me-2"></i>Логирование работы API и FCM</h6>
                    
                    <div class="form-check form-switch mb-3">
                        <input class="form-check-input" type="checkbox" name="chat_fcm_logging" value="1" id="fcm-logging" <?php echo ($chat_fcm_logging == '1') ? 'checked' : ''; ?> style="width: 42px; height: 21px; cursor: pointer;">
                        <label class="form-check-label text-secondary small ms-2 pt-1" for="fcm-logging">
                            Логировать отправку Push-уведомлений FCM в файл <code>log/fcm.log</code>. <span class="text-muted d-block" style="font-size: 11px;">Логирует процесс отправки пуш-уведомлений, список токенов, cURL запросы и ответы от транзитного сервера.</span>
                        </label>
                    </div>

                    <div class="form-check form-switch">
                        <input class="form-check-input" type="checkbox" name="chat_api_auth_logging" value="1" id="api-auth-logging" <?php echo ($chat_api_auth_logging == '1') ? 'checked' : ''; ?> style="width: 42px; height: 21px; cursor: pointer;">
                        <label class="form-check-label text-secondary small ms-2 pt-1" for="api-auth-logging">
                            Логировать попытки авторизации API в файл <code>log/api_auth.log</code>. <span class="text-muted d-block" style="font-size: 11px;">Логирует попытки входа мобильного приложения, проверку подписей операторов, токены и статусы успешности/ошибок.</span>
                        </label>
                    </div>
                </div>
                
                <div class="row align-items-center mt-4">
                    <div class="col-md-6 col-lg-5 text-center mb-4 mb-md-0">
                        <div class="p-4 bg-light rounded-4 text-center" style="border: 1px solid #e2e8f0;">
                            <i class="fa fa-qrcode fa-3x text-muted mb-3 d-block"></i>
                            <p class="text-muted small mb-2">QR-код для входа в приложение доступен индивидуально для каждого оператора.</p>
                            <a href="index.php?route=operator" class="btn btn-outline-primary btn-sm px-4 py-2" style="border-radius: 8px;">
                                <i class="fa fa-users me-1"></i> Перейти к операторам
                            </a>
                        </div>
                    </div>
                </div>
            </div>




            <!-- PANEL 4: AI CONSULTANT SETTINGS -->
            <div class="tab-pane fade animate__animated animate__fadeIn" id="ai-panel" role="tabpanel">
                <h5 class="fw-bold text-dark mb-3" style="font-family: 'Outfit', sans-serif;">ИИ Авто-Консультант</h5>
                <p class="text-muted small mb-4">Автоматические квалифицированные ответы искусственного интеллекта (ChatGPT или Google Gemini) для удержания клиентов, если ни один оператор не ответил в течение N минут.</p>
                <div class="d-flex flex-wrap align-items-center gap-2 mb-4 small">
                    <span class="text-muted fw-semibold">Маршруты AI:</span>
                    <span>EasyTokens <?php echo $easychat_proxy_badge('ai_easytokens'); ?></span>
                    <span>OpenAI <?php echo $easychat_proxy_badge('ai_openai'); ?></span>
                    <span>Gemini <?php echo $easychat_proxy_badge('ai_gemini'); ?></span>
                </div>

                <!-- Cron warning for AI -->
                <div class="alert alert-info p-3 mb-4 d-flex align-items-start gap-2 animate__animated animate__fadeIn" style="border-radius: 12px; font-size: 13px; border: 1px solid rgba(13, 110, 253, 0.25); background-color: rgba(13, 110, 253, 0.05); color: #084298;">
                    <i class="fa fa-info-circle mt-1 text-primary" style="font-size: 15px;"></i>
                    <div>
                        Для работы ИИ-консультанта (обработка очереди запросов, генерация ответов и построение эмбеддингов) требуется настроенный планировщик задач. 
                        <a href="javascript:void(0)" class="switch-to-cron-tab fw-semibold text-decoration-none">Перейти к настройке Cron</a>.
                    </div>
                </div>

                <div class="mb-4">
                    <label class="form-label text-muted small d-block">Автоответы ИИ</label>
                    <div class="form-check form-switch">
                        <input class="form-check-input" type="checkbox" name="chat_ai_status" value="1" id="ai-status" <?php echo ($chat_ai_status == '1') ? 'checked' : ''; ?> style="width: 48px; height: 24px; cursor: pointer;">
                        <label class="form-check-label text-secondary small ms-2 pt-1" for="ai-status">Включить автоответы искусственного интеллекта</label>
                    </div>
                    <div class="text-muted small mt-2">Переключатель разрешает ИИ самостоятельно отвечать клиентам в чате. Подсказки оператору, AI-помощник шаблонов и база знаний работают отдельно при настроенном API key.</div>
                    <div class="text-muted small mt-2" id="ai-status-autosave" aria-live="polite"></div>
                    <div class="form-check form-switch mt-3">
                        <input class="form-check-input" type="checkbox" name="chat_ai_live_typing" value="1" id="ai-live-typing" <?php echo (($chat_ai_live_typing ?? '1') == '1') ? 'checked' : ''; ?> style="width: 42px; height: 21px; cursor: pointer;">
                        <label class="form-check-label text-secondary small ms-2 pt-1" for="ai-live-typing">
                            Живая печать ответа ИИ
                            <i class="fa fa-info-circle text-muted ms-1" aria-hidden="true" title="Если ответ формирует нейронка, виджет показывает текст по мере генерации. Ответы операторов не стримятся."></i>
                        </label>
                    </div>
                    <div class="voice-transcription-setting mt-3 p-3 rounded-3 border" id="voice-transcription-setting">
                        <div class="d-flex align-items-start justify-content-between gap-3">
                            <label class="voice-transcription-setting__label d-flex align-items-start gap-3 flex-grow-1 mb-0" for="voice-transcription-status">
                                <span class="voice-transcription-setting__icon" aria-hidden="true"><i class="fa fa-microphone"></i></span>
                                <span>
                                    <strong class="d-block text-dark"><?php echo htmlspecialchars(easychat_t('settings.voice_transcription_title', [], $easychat_locale ?? 'ru')); ?></strong>
                                    <span class="d-block text-muted small mt-1"><?php echo htmlspecialchars(easychat_t('settings.voice_transcription_desc', [], $easychat_locale ?? 'ru')); ?></span>
                                    <span class="d-block small mt-2 text-primary" id="voice-transcription-provider-note"><i class="fa fa-shield me-1"></i><?php echo htmlspecialchars(easychat_t('settings.voice_transcription_provider_note', [], $easychat_locale ?? 'ru')); ?></span>
                                </span>
                            </label>
                            <div class="form-check form-switch m-0 pt-1">
                                <input class="voice-transcription-setting__switch form-check-input easychat-switch-md" type="checkbox" name="chat_voice_transcription_status" value="1" id="voice-transcription-status" <?php echo (($chat_voice_transcription_status ?? '1') == '1') ? 'checked' : ''; ?> aria-describedby="voice-transcription-provider-note">
                            </div>
                        </div>
                    </div>
                </div>

                <div class="card border border-light shadow-sm mb-4 ai-suggestions-settings" style="border-radius: 14px; background: #ffffff;">
                    <div class="card-body p-4">
                        <div class="d-flex flex-wrap align-items-start justify-content-between gap-3 mb-3">
                            <div>
                                <h6 class="fw-bold text-dark mb-1" style="font-size: 15px;">
                                    <i class="fa fa-magic text-primary me-2"></i>AI-подсказки оператору
                                </h6>
                                <div class="text-muted small">ИИ готовит черновики ответов по диалогу и базе знаний. Оператор сам вставляет и отправляет текст.</div>
                            </div>
                            <div class="form-check form-switch m-0">
                                <input class="form-check-input" type="checkbox" name="chat_ai_suggestions_status" value="1" id="ai-suggestions-status" <?php echo (($chat_ai_suggestions_status ?? '0') == '1') ? 'checked' : ''; ?> style="width: 46px; height: 23px; cursor: pointer;">
                            </div>
                        </div>

                        <div class="row g-3" id="ai-suggestions-options" style="<?php echo (($chat_ai_suggestions_status ?? '0') == '1') ? '' : 'display:none;'; ?>">
                            <div class="col-md-4">
                                <label class="form-label text-muted small">Новые операторы</label>
                                <select name="chat_ai_suggestions_default_mode" class="form-select" style="border-radius: 8px; height: 38px;">
                                    <option value="on" <?php echo (($chat_ai_suggestions_default_mode ?? 'on') !== 'off') ? 'selected' : ''; ?>>Получают подсказки</option>
                                    <option value="off" <?php echo (($chat_ai_suggestions_default_mode ?? 'on') === 'off') ? 'selected' : ''; ?>>Без подсказок</option>
                                </select>
                            </div>
                            <div class="col-md-4">
                                <label class="form-label text-muted small">Контекст диалога</label>
                                <input type="number" name="chat_ai_suggestions_context_limit" class="form-control" min="4" max="12" value="<?php echo htmlspecialchars($chat_ai_suggestions_context_limit ?? '12'); ?>" style="border-radius: 8px; height: 38px;">
                            </div>
                            <div class="col-md-4 d-flex align-items-end">
                                <div class="form-check form-switch mb-2">
                                    <input class="form-check-input" type="checkbox" name="chat_ai_suggestions_use_knowledge" value="1" id="ai-suggestions-knowledge" <?php echo (($chat_ai_suggestions_use_knowledge ?? '1') == '1') ? 'checked' : ''; ?> style="width: 42px; height: 21px; cursor: pointer;">
                                    <label class="form-check-label text-secondary small ms-2 pt-1" for="ai-suggestions-knowledge">Учитывать базу знаний</label>
                                </div>
                            </div>
                            <div class="col-12">
                                <div class="easychat-copilot-setting">
                                    <div>
                                        <label class="easychat-copilot-setting__title" for="ai-copilot-ghost-status">
                                            <i class="fa fa-terminal" aria-hidden="true"></i>Продолжать фразы в поле ответа
                                        </label>
                                        <div class="easychat-copilot-setting__hint" id="ai-copilot-ghost-hint">После короткой паузы Copilot предложит серое продолжение. Tab вставит его, Esc скроет. Каждый новый вариант расходует EasyTokens; повтор уже рассчитанного варианта берётся из кэша.</div>
                                    </div>
                                    <div class="form-check form-switch m-0">
                                        <input class="form-check-input easychat-switch-md" type="checkbox" name="chat_ai_copilot_ghost_status" value="1" id="ai-copilot-ghost-status" <?php echo (($chat_ai_copilot_ghost_status ?? '0') == '1') ? 'checked' : ''; ?> aria-describedby="ai-copilot-ghost-hint">
                                    </div>
                                </div>
                            </div>
                        </div>
                    </div>
                </div>

                <div class="card border border-light shadow-sm mb-4 easychat-settings-card">
                    <div class="card-body p-4">
                        <div class="d-flex flex-wrap align-items-start justify-content-between gap-3 mb-3">
                            <div>
                                <h6 class="fw-bold text-dark mb-1 easychat-settings-card-title">
                                    <i class="fa fa-tags text-primary me-2"></i>AI-контекст Авито
                                </h6>
                                <div class="text-muted small">Управляет тем, как ИИ использует контекст объявления Авито, базу знаний и поиск по сайту.</div>
                            </div>
                            <div class="form-check form-switch m-0">
                                <input class="form-check-input easychat-switch-md" type="checkbox" name="chat_ai_avito_item_context_status" value="1" id="ai-avito-item-context-status" <?php echo (($chat_ai_avito_item_context_status ?? '1') == '1') ? 'checked' : ''; ?>>
                            </div>
                        </div>

                        <div class="alert alert-warning py-2 px-3 mb-3 easychat-alert-rounded" id="ai-avito-context-hint" style="display:none;">
                            <span class="small">Сначала укажите API key ИИ-провайдера, затем можно включить AI-контекст Авито.</span>
                        </div>
                        <div class="alert alert-light border py-2 px-3 mb-3 easychat-alert-rounded" id="ai-avito-policy-disabled-hint" style="display:none;">
                            <span class="small text-muted">Политики ниже сохраняются, но применяются только когда указан API key и включен AI-контекст Авито.</span>
                        </div>

                        <div class="row g-3" id="ai-avito-policy-options">
                            <div class="col-md-4">
                                <label class="form-label text-muted small">RAG в Avito</label>
                                <select name="chat_ai_avito_rag_mode" class="form-select easychat-rounded-field" data-avito-ai-policy-control>
                                    <option value="auto" <?php echo (($chat_ai_avito_rag_mode ?? 'auto') === 'auto') ? 'selected' : ''; ?>>Авто: только где полезно</option>
                                    <option value="general_chats" <?php echo (($chat_ai_avito_rag_mode ?? 'auto') === 'general_chats') ? 'selected' : ''; ?>>Только общие чаты</option>
                                    <option value="always" <?php echo (($chat_ai_avito_rag_mode ?? 'auto') === 'always') ? 'selected' : ''; ?>>Всегда использовать</option>
                                    <option value="off" <?php echo (($chat_ai_avito_rag_mode ?? 'auto') === 'off') ? 'selected' : ''; ?>>Не использовать</option>
                                </select>
                                <div class="text-muted mt-1" style="font-size:11px;">Для вопросов по конкретному объявлению ИИ не тратит RAG без необходимости.</div>
                            </div>
                            <div class="col-md-4">
                                <label class="form-label text-muted small">Поиск по сайту в Avito</label>
                                <select name="chat_ai_avito_tools_mode" class="form-select easychat-rounded-field" data-avito-ai-policy-control>
                                    <option value="auto" <?php echo (($chat_ai_avito_tools_mode ?? 'auto') === 'auto') ? 'selected' : ''; ?>>Авто: страницы и товары по смыслу</option>
                                    <option value="pages_only" <?php echo (($chat_ai_avito_tools_mode ?? 'auto') === 'pages_only') ? 'selected' : ''; ?>>Только страницы</option>
                                    <option value="products_pages" <?php echo (($chat_ai_avito_tools_mode ?? 'auto') === 'products_pages') ? 'selected' : ''; ?>>Товары и страницы</option>
                                    <option value="off" <?php echo (($chat_ai_avito_tools_mode ?? 'auto') === 'off') ? 'selected' : ''; ?>>Не искать</option>
                                </select>
                                <div class="text-muted mt-1" style="font-size:11px;">Так ИИ не подмешивает случайные товары, если клиент спрашивает про карточку Авито.</div>
                            </div>
                            <div class="col-md-4">
                                <label class="form-label text-muted small">Альтернативы товара</label>
                                <select name="chat_ai_avito_alternatives_mode" class="form-select easychat-rounded-field" data-avito-ai-policy-control>
                                    <option value="on_request" <?php echo (($chat_ai_avito_alternatives_mode ?? 'on_request') === 'on_request') ? 'selected' : ''; ?>>Только по просьбе клиента</option>
                                    <option value="soft" <?php echo (($chat_ai_avito_alternatives_mode ?? 'on_request') === 'soft') ? 'selected' : ''; ?>>Мягко предлагать</option>
                                    <option value="off" <?php echo (($chat_ai_avito_alternatives_mode ?? 'on_request') === 'off') ? 'selected' : ''; ?>>Не предлагать</option>
                                </select>
                                <div class="text-muted mt-1" style="font-size:11px;">Контролирует, когда ИИ может искать похожие позиции в каталоге сайта.</div>
                            </div>
                        </div>

                        <div class="border-top mt-4 pt-4">
                            <div class="d-flex flex-wrap align-items-start justify-content-between gap-3 mb-3">
                                <div>
                                    <h6 class="fw-bold text-dark mb-1" style="font-size: 14px;"><i class="fa fa-file-text-o text-secondary me-2"></i>Диагностика Avito</h6>
                                    <span class="text-muted small">Включите только на время отладки: EasyChat покажет последние безопасные строки из <code>log/avito.log</code>.</span>
                                </div>
                                <div class="form-check form-switch m-0">
                                    <input class="form-check-input easychat-switch-md" type="checkbox" name="chat_avito_logging" value="1" id="avito-logging" <?php echo (($chat_avito_logging ?? '0') == '1') ? 'checked' : ''; ?>>
                                </div>
                            </div>
                            <div id="avito-logging-console-block" style="<?php echo (($chat_avito_logging ?? '0') == '1') ? '' : 'display: none;'; ?>">
                                <div class="d-flex justify-content-between align-items-center mb-2">
                                    <span class="text-secondary small fw-bold">Последние записи Avito:</span>
                                    <div>
                                        <button type="button" class="btn btn-sm btn-outline-primary py-1 px-2.5 me-2 easychat-log-action" id="btn-refresh-avito-logs"><i class="fa fa-refresh me-1"></i> Обновить</button>
                                        <button type="button" class="btn btn-sm btn-outline-danger py-1 px-2.5 easychat-log-action" id="btn-clear-avito-logs"><i class="fa fa-trash me-1"></i> Очистить</button>
                                    </div>
                                </div>
                                <pre id="avito-logs-console" class="easychat-log-console text-white p-3 mb-0">Загрузка логов...</pre>
                            </div>
                        </div>
                    </div>
                </div>

	                <div class="row" id="ai-provider-model-row">
	                    <div class="col-md-7 mb-3" id="ai-provider-field">
	                        <label class="form-label text-muted small">Провайдер ИИ модели</label>
	                        <input type="hidden" name="chat_ai_provider" id="ai-provider-value" value="<?php echo htmlspecialchars($effective_ai_provider); ?>">
	                        <div class="ai-provider-select" id="ai-provider-select">
	                            <button type="button" class="ai-provider-trigger" id="ai-provider-trigger" aria-haspopup="listbox" aria-expanded="false">
	                                <span class="ai-provider-trigger-content">
	                                    <span class="ai-provider-trigger-label" id="ai-provider-trigger-label"><?php echo htmlspecialchars($chat_ai_provider_label); ?></span>
	                                    <span class="ai-provider-badges ai-provider-trigger-badges" id="ai-provider-trigger-badges" aria-label="Преимущества EasyTokens" style="<?php echo empty($chat_ai_provider_badges) ? 'display:none;' : ''; ?>">
	                                        <?php if (!empty($chat_ai_provider_badges)) { ?>
	                                            <span class="ai-provider-badge ai-provider-badge-green"><?php echo htmlspecialchars($chat_ai_provider_badges[0]); ?></span>
	                                            <span class="ai-provider-badge ai-provider-badge-purple"><?php echo htmlspecialchars($chat_ai_provider_badges[1]); ?></span>
	                                        <?php } ?>
	                                    </span>
	                                </span>
	                                <i class="fa fa-chevron-down ai-provider-trigger-icon" aria-hidden="true"></i>
	                            </button>
	                            <div class="ai-provider-menu" id="ai-provider-menu" role="listbox" aria-label="Провайдер ИИ модели">
	                                <?php foreach ($chat_ai_provider_options as $provider_value => $provider_option) { ?>
	                                    <button type="button" class="ai-provider-option <?php echo ($effective_ai_provider === $provider_value) ? 'is-selected' : ''; ?>" role="option" aria-selected="<?php echo ($effective_ai_provider === $provider_value) ? 'true' : 'false'; ?>" data-provider="<?php echo htmlspecialchars($provider_value); ?>" data-label="<?php echo htmlspecialchars($provider_option['label']); ?>" data-badge-green="<?php echo htmlspecialchars($provider_option['badges'][0] ?? ''); ?>" data-badge-purple="<?php echo htmlspecialchars($provider_option['badges'][1] ?? ''); ?>" data-default-model="<?php echo htmlspecialchars($provider_option['default_model']); ?>" data-placeholder="<?php echo htmlspecialchars($provider_option['placeholder']); ?>">
	                                        <span class="ai-provider-option-content">
	                                            <span class="ai-provider-option-title"><?php echo htmlspecialchars($provider_option['label']); ?></span>
	                                            <?php if (!empty($provider_option['badges'])) { ?>
	                                                <span class="ai-provider-badges" aria-label="Преимущества EasyTokens">
	                                                    <span class="ai-provider-badge ai-provider-badge-green"><?php echo htmlspecialchars($provider_option['badges'][0]); ?></span>
	                                                    <span class="ai-provider-badge ai-provider-badge-purple"><?php echo htmlspecialchars($provider_option['badges'][1]); ?></span>
	                                                </span>
	                                            <?php } ?>
	                                        </span>
	                                        <i class="fa fa-check ai-provider-check" aria-hidden="true"></i>
	                                    </button>
	                                <?php } ?>
	                            </div>
	                        </div>
	                    </div>
	                    <div class="col-md-5 mb-3" id="ai-model-field">
	                        <label class="form-label text-muted small">Модель ИИ</label>
	                        <input type="hidden" name="chat_ai_model" id="ai-model-value" value="<?php echo htmlspecialchars($effective_ai_model); ?>">
	                        <input type="text" class="form-control" id="ai-model-text" value="<?php echo htmlspecialchars($is_easytokens_provider ? '' : $effective_ai_model); ?>" placeholder="<?php echo htmlspecialchars($chat_ai_model_placeholder); ?>" style="border-radius: 8px; <?php echo $is_easytokens_provider ? 'display:none;' : ''; ?>">
	                        <select class="form-select" id="ai-model-select" style="border-radius: 8px; <?php echo $is_easytokens_provider ? '' : 'display:none;'; ?>">
	                            <option value="easylite" <?php echo ($chat_easytokens_model === 'easylite') ? 'selected' : ''; ?>>Наша Нейросеть</option>
	                            <?php if ($chat_easytokens_model !== 'easylite') { ?>
	                                <option value="<?php echo htmlspecialchars($chat_easytokens_model); ?>" selected><?php echo htmlspecialchars($chat_easytokens_model); ?></option>
	                            <?php } ?>
	                        </select>
	                    </div>
	                </div>

                    <div id="easytokens-gift-card" class="easytokens-gift-card mb-3" style="display:none;" data-gift-status="<?php echo htmlspecialchars($chat_easytokens_gift_status, ENT_QUOTES, 'UTF-8'); ?>">
                        <div class="easytokens-gift-card-main">
                            <div class="easytokens-gift-icon" aria-hidden="true">
                                <i class="fa fa-bolt"></i>
                            </div>
                            <div class="easytokens-gift-copy">
                                <div class="easytokens-gift-kicker"><?php echo htmlspecialchars(easychat_t('settings.easytokens_gift_kicker', [], $easychat_locale ?? 'ru')); ?></div>
                                <h6 class="easytokens-gift-title"><?php echo htmlspecialchars(easychat_t('settings.easytokens_gift_title', [], $easychat_locale ?? 'ru')); ?></h6>
                                <p class="easytokens-gift-text"><?php echo htmlspecialchars(easychat_t('settings.easytokens_gift_text', [], $easychat_locale ?? 'ru')); ?></p>
                                <div class="easytokens-gift-email-row">
                                    <label class="easytokens-gift-email-label" for="easytokens-gift-email"><?php echo htmlspecialchars(easychat_t('settings.easytokens_gift_email_label', [], $easychat_locale ?? 'ru')); ?></label>
                                    <input type="email" class="form-control" id="easytokens-gift-email" value="<?php echo htmlspecialchars($easychat_gift_email_value, ENT_QUOTES, 'UTF-8'); ?>" placeholder="owner@example.com" autocomplete="email">
                                </div>
                                <div class="easytokens-gift-status" id="easytokens-gift-status" aria-live="polite"></div>
                            </div>
                        </div>
                        <div class="easytokens-gift-actions">
                            <button type="button" class="btn btn-primary easytokens-gift-claim" id="btn-easytokens-gift-claim">
                                <i class="fa fa-bolt me-2"></i><?php echo htmlspecialchars(easychat_t('settings.easytokens_gift_claim', [], $easychat_locale ?? 'ru')); ?>
                            </button>
                            <button type="button" class="btn btn-light easytokens-gift-secondary" id="btn-easytokens-gift-manual">
                                <?php echo htmlspecialchars(easychat_t('settings.easytokens_gift_manual', [], $easychat_locale ?? 'ru')); ?>
                            </button>
                        </div>
                    </div>

	                <div id="easytokens-balance-card" class="ai-balance-card mb-3" style="display: <?php echo $is_easytokens_provider ? 'block' : 'none'; ?>;">
	                    <div class="ai-balance-status" id="easytokens-balance-status" style="display:none;"></div>
	                    <div class="ai-balance-shell">
	                        <div class="ai-balance-icon" aria-hidden="true">
	                            <i class="fa fa-credit-card"></i>
	                        </div>
	                        <div class="ai-balance-main">
                            <div class="ai-balance-kicker"><?php echo htmlspecialchars(easychat_t('settings.easytokens_balance_kicker', [], $easychat_locale ?? 'ru')); ?></div>
                            <div class="ai-balance-value" id="easytokens-balance-value">—</div>
                            <div class="ai-balance-hint" id="easytokens-balance-hint"><?php echo htmlspecialchars(easychat_t('settings.easytokens_balance_empty_hint', [], $easychat_locale ?? 'ru')); ?></div>
	                            <div class="ai-balance-meta" id="easytokens-balance-meta" style="display:none;"></div>
	                        </div>
	                        <div class="ai-balance-actions">
	                            <button type="button" class="btn btn-primary ai-balance-refresh" id="btn-easytokens-refresh">
                                <i class="fa fa-refresh me-2"></i><?php echo htmlspecialchars(easychat_t('settings.easytokens_balance_refresh', [], $easychat_locale ?? 'ru')); ?>
                            </button>
                            <button type="button" class="btn btn-primary ai-balance-topup" id="btn-easytokens-topup">
                                <i class="fa fa-credit-card me-2"></i><?php echo htmlspecialchars(easychat_t('settings.easytokens_balance_topup', [], $easychat_locale ?? 'ru')); ?>
                            </button>
	                        </div>
	                    </div>
	                </div>

	                <div class="mb-3" id="ai-api-key-field">
	                    <label class="form-label text-muted small">API Ключ провайдера (API Key)</label>
                    <input type="text" class="form-control" name="chat_ai_key" value="<?php echo htmlspecialchars($chat_ai_key); ?>" placeholder="Введите ваш секретный API ключ" style="border-radius: 8px;">
                    <span class="text-muted" id="ai-api-key-help" style="font-size: 11px; display: <?php echo $is_easytokens_provider ? 'block' : 'none'; ?>;">
                        Можно вставить свой EasyTokens API key или получить стартовые 30 000 токенов через карточку выше.
                    </span>
                </div>

                <div class="row">
                    <div class="col-md-8 mb-3">
                        <label class="form-label text-muted small">Кастомный API Host Endpoint (необязательно)</label>
                        <input type="text" class="form-control" name="chat_ai_host" value="<?php echo htmlspecialchars($chat_ai_host); ?>" placeholder="например, https://openrouter.ai/api/v1 или прокси" style="border-radius: 8px;">
                        <span class="text-muted" style="font-size: 11px;">Заполните, если используете прокси, OpenRouter, локальный Llama.cpp или кастомный шлюз. Оставьте пустым для стандартных URL.</span>
                    </div>
                    <div class="col-md-4 mb-3">
                        <label class="form-label text-muted small">Температура (Креативность)</label>
                        <input type="number" class="form-control" name="chat_ai_temp" value="<?php echo htmlspecialchars($chat_ai_temp); ?>" min="0" max="2" step="0.1" style="border-radius: 8px;">
                        <span class="text-muted" style="font-size: 11px;">От 0.0 (строгие ответы) до 2.0 (творческие). Рекомендуется: 0.5–0.7.</span>
                    </div>
                </div>

                <?php $ai_response_timing_mode = $chat_ai_response_timing_mode ?? 'strict_delay'; ?>
                <div class="mb-3">
                    <label class="form-label text-muted small fw-semibold">Когда ИИ может ответить сам</label>
                    <div class="row g-2" role="radiogroup" aria-label="Режим времени AI-ответа">
                        <div class="col-md-6">
                            <label class="d-flex gap-2 border p-3 h-100 easychat-rounded-field" style="cursor:pointer;">
                                <input class="form-check-input mt-1" type="radio" name="chat_ai_response_timing_mode" value="strict_delay" id="ai-response-timing-strict" <?php echo ($ai_response_timing_mode !== 'operator_backup') ? 'checked' : ''; ?>>
                                <span>
                                    <span class="d-block fw-semibold text-dark small">Строгая пауза</span>
                                    <span class="d-block text-muted" style="font-size:11px;">ИИ всегда ждет общую задержку. Самый безопасный режим, если presence оператора может ошибиться.</span>
                                </span>
                            </label>
                        </div>
                        <div class="col-md-6">
                            <label class="d-flex gap-2 border p-3 h-100 easychat-rounded-field" style="cursor:pointer;">
                                <input class="form-check-input mt-1" type="radio" name="chat_ai_response_timing_mode" value="operator_backup" id="ai-response-timing-backup" <?php echo ($ai_response_timing_mode === 'operator_backup') ? 'checked' : ''; ?>>
                                <span>
                                    <span class="d-block fw-semibold text-dark small">Подстраховка оператора</span>
                                    <span class="d-block text-muted" style="font-size:11px;">Пока оператор online, ИИ ждет общую задержку. Если операторов online нет, применяется короткая offline-пауза.</span>
                                </span>
                            </label>
                        </div>
                    </div>
                    <span class="text-muted d-block mt-2" style="font-size: 11px;"><i class="fa fa-info-circle me-1"></i> Online считается по foreground-активности в админке и Android; фоновые sync-запросы Android не держат оператора online.</span>
                </div>

                <div class="row g-3 mb-3">
                    <div class="col-md-4">
                        <label class="form-label text-muted small">Общая задержка ИИ (минуты)</label>
                        <input type="number" class="form-control" name="chat_ai_delay" value="<?php echo htmlspecialchars($chat_ai_delay); ?>" min="0" max="60" style="border-radius: 8px;">
                        <span class="text-muted" style="font-size: 11px;">В строгом режиме это обязательная пауза для всех каналов. В подстраховке — пауза, пока оператор online.</span>
                    </div>
                    <div class="col-md-4" id="ai-offline-delay-field" style="<?php echo ($ai_response_timing_mode === 'operator_backup') ? '' : 'display:none;'; ?>">
                        <label class="form-label text-muted small">Пауза без online-операторов (секунды)</label>
                        <input type="number" class="form-control" name="chat_ai_offline_delay_seconds" value="<?php echo htmlspecialchars($chat_ai_offline_delay_seconds ?? '30'); ?>" min="0" max="600" step="5" style="border-radius: 8px;">
                        <span class="text-muted" style="font-size: 11px;">Можно поставить 0 для прежнего почти мгновенного ответа, но 15-30 секунд обычно безопаснее.</span>
                    </div>
                </div>

                <div class="mb-3">
                    <label class="form-label text-muted small">Системные инструкции (System Prompt / Контекст)</label>
                    <textarea name="chat_ai_prompt" class="form-control" rows="30" placeholder="Инструкции о том, как ИИ должен общаться с клиентом..." style="border-radius: 8px; font-size: 13px;"><?php echo htmlspecialchars($chat_ai_prompt); ?></textarea>
                </div>

                <!-- Vector Size Select -->
                <div class="mb-4">
                    <label class="form-label text-muted small fw-semibold">Размер вектора (Embedding Dimension)</label>
                    <select name="chat_embedding_dimension" class="form-select" style="border-radius: 8px; max-width: 280px;">
                        <option value="1" <?php echo (($chat_embedding_dimension ?? '2') == '1') ? 'selected' : ''; ?>>Низкий</option>
                        <option value="2" <?php echo (($chat_embedding_dimension ?? '2') == '2') ? 'selected' : ''; ?>>Средний</option>
                        <option value="3" <?php echo (($chat_embedding_dimension ?? '2') == '3') ? 'selected' : ''; ?>>Высокий</option>
                    </select>
                    <span class="text-muted d-block mt-1" style="font-size:11px;">
                        <i class="fa fa-info-circle me-1"></i> Больший размер повышает точность семантического поиска, но требует больше памяти. Изменение размера требует переиндексации базы знаний.
                    </span>
                </div>

                <!-- Шаги обработки ИИ-Консультанта -->
                <div class="border-top pt-4 mt-4">
                    <h6 class="fw-bold text-dark mb-3" style="font-family: 'Outfit', sans-serif;"><i class="fa fa-sliders text-primary me-2"></i>Шаги обработки и конвейер ИИ (Pipeline)</h6>
                    <p class="text-muted small mb-4">Настройте последовательность шагов и проверок перед выдачей ответа клиенту. Это позволит снизить расходы на API и обогатить ответы ИИ актуальной информацией.</p>
                    
                    <!-- Шаг 1: Извлечение контактов -->
                    <div class="card border border-light shadow-sm mb-3" style="border-radius: 12px; background: rgba(248, 249, 250, 0.4);">
                        <div class="card-body">
                            <div class="d-flex justify-content-between align-items-center">
                                <div>
                                    <h6 class="fw-bold mb-1 text-dark" style="font-size: 14px;">Шаг 1: Автоматическое извлечение контактных данных</h6>
                                    <span class="text-muted small">Сканирует сообщения клиентов с помощью ИИ и автоматически сохраняет их телефон или email в базу данных.</span>
                                </div>
                                <div class="form-check form-switch">
                                    <input class="form-check-input" type="checkbox" name="chat_ai_extract_status" value="1" id="ai-extract-status" <?php echo ($chat_ai_extract_status == '1') ? 'checked' : ''; ?> style="width: 42px; height: 21px; cursor: pointer;">
                                </div>
                            </div>
                        </div>
                    </div>

                    <!-- Шаг 2: Проверка тематики -->
                    <div class="card border border-light shadow-sm mb-3" style="border-radius: 12px; background: rgba(248, 249, 250, 0.4);">
                        <div class="card-body">
                            <div class="d-flex justify-content-between align-items-center mb-3">
                                <div>
                                    <h6 class="fw-bold mb-1 text-dark" style="font-size: 14px;">Шаг 2: Проверка соответствия тематике сайта</h6>
                                    <span class="text-muted small">Отсекает нецелевые запросы (программирование, оффтоп) для экономии токенов.</span>
                                </div>
                                <div class="form-check form-switch">
                                    <input class="form-check-input" type="checkbox" name="chat_ai_theme_status" value="1" id="ai-theme-status" <?php echo ($chat_ai_theme_status == '1') ? 'checked' : ''; ?> style="width: 42px; height: 21px; cursor: pointer;">
                                </div>
                            </div>
                            
                            <div id="ai-theme-options" style="<?php echo ($chat_ai_theme_status == '1') ? '' : 'display: none;'; ?>">
                                <div class="mb-3">
                                    <label class="form-label text-muted small">Описание тематики сайта</label>
                                    <textarea class="form-control" name="chat_ai_theme_desc" rows="3" placeholder="Опишите, о чем ваш сайт, список разрешенных тем, товаров или услуг (например, интернет-магазин цветов, доставка букетов, вопросы об оплате и графике работы)..." style="border-radius: 8px; font-size: 13px;"><?php echo htmlspecialchars($chat_ai_theme_desc); ?></textarea>
                                    <span class="text-muted" style="font-size: 11px;">Подробное описание товаров или услуг сайта, чтобы ИИ понимал границы разрешенных тем</span>
                                </div>
                                <div class="mb-1">
                                    <label class="form-label text-muted small">Сообщение при отклонении (Оффтоп)</label>
                                    <textarea name="chat_ai_theme_reject" class="form-control" rows="2" style="border-radius: 8px; font-size: 13px;"><?php echo htmlspecialchars($chat_ai_theme_reject); ?></textarea>
                                    <span class="text-muted" style="font-size: 11px;">Вежливый ответ, который будет немедленно отправлен клиенту, если тема не совпадает</span>
                                </div>
                            </div>
                        </div>
                    </div>

                    <!-- Шаг 3: Поиск по базе знаний и CMS (Семантический поиск) -->
                    <div class="card border border-light shadow-sm mb-3" style="border-radius: 12px; background: rgba(248, 249, 250, 0.4);">
                        <div class="card-body">
                            <div class="d-flex justify-content-between align-items-center">
                                <div>
                                    <h6 class="fw-bold mb-1 text-dark" style="font-size: 14px; color: #198754 !important;">Шаг 3: Поиск по базе знаний и товарам сайта</h6>
                                    <span class="text-muted small">Позволяет ИИ искать информацию в базе знаний сайта и рекомендовать товары с ценами и ссылками.</span>
                                </div>
                                <span class="badge bg-success-subtle text-success border border-success-subtle px-2.5 py-1.5" style="font-size: 11px; border-radius: 6px;">
                                    <i class="fa fa-info-circle me-1"></i> Настраивается на вкладке «Интеграция с CMS»
                                </span>
                            </div>
                        </div>
                    </div>

                    <!-- Логирование ИИ -->
                    <div class="card border border-light shadow-sm mt-4" style="border-radius: 12px; background: rgba(248, 249, 250, 0.4);">
                        <div class="card-body">
                            <div class="d-flex justify-content-between align-items-center mb-3">
                                <div>
                                    <h6 class="fw-bold mb-1 text-dark" style="font-size: 14px;"><i class="fa fa-file-text-o text-secondary me-2"></i>Логирование работы ИИ</h6>
                                    <span class="text-muted small">Включите для записи подробной диагностики запросов и ответов в файл <code>log/ai.log</code>.</span>
                                </div>
                                <div class="form-check form-switch">
                                    <input class="form-check-input" type="checkbox" name="chat_ai_logging" value="1" id="ai-logging" <?php echo ($chat_ai_logging == '1') ? 'checked' : ''; ?> style="width: 42px; height: 21px; cursor: pointer;">
                                </div>
                            </div>
                            
                            <div id="ai-logging-console-block" style="<?php echo ($chat_ai_logging == '1') ? '' : 'display: none;'; ?>">
                                <div class="d-flex justify-content-between align-items-center mb-2">
                                    <span class="text-secondary small fw-bold">Последние записи логов ИИ:</span>
                                    <div>
                                        <button type="button" class="btn btn-sm btn-outline-primary py-1 px-2.5 me-2" id="btn-refresh-ai-logs" style="border-radius: 6px; font-size: 11px;"><i class="fa fa-refresh me-1"></i> Обновить</button>
                                        <button type="button" class="btn btn-sm btn-outline-danger py-1 px-2.5" id="btn-clear-ai-logs" style="border-radius: 6px; font-size: 11px;"><i class="fa fa-trash me-1"></i> Очистить</button>
                                    </div>
                                </div>
                                <pre id="ai-logs-console" class="text-white p-3 mb-0" style="background: #1e1e1e; border-radius: 8px; font-family: monospace; font-size: 12px; max-height: 250px; overflow-y: auto; white-space: pre-wrap; word-break: break-all; border: 1px solid #333; line-height: 1.4;">Загрузка логов...</pre>
                            </div>
                        </div>
                    </div>
                </div>
            </div>

            <!-- PANEL 5: CMS INTEGRATION -->
            <div class="tab-pane fade animate__animated animate__fadeIn" id="cms-panel" role="tabpanel">
                <input type="hidden" name="chat_cms_search_recommendation_dismissed" value="<?php echo ($chat_cms_search_recommendation_dismissed ?? '0') === '1' ? '1' : '0'; ?>">
                <div class="catalog-heading">
                    <div>
                        <h5><i class="fa fa-search" aria-hidden="true"></i> Каталог и поиск</h5>
                        <p>EasyChat находит товары прямо в магазине и перед ответом проверяет их актуальную доступность.</p>
                    </div>
                    <span class="catalog-status-badge <?php echo $catalog_ready ? 'is-ready' : 'is-warning'; ?>">
                        <i class="fa <?php echo $catalog_ready ? 'fa-check-circle' : 'fa-exclamation-circle'; ?>" aria-hidden="true"></i>
                        <?php echo $catalog_ready ? 'Каталог подключён' : 'Каталог требует проверки'; ?>
                    </span>
                </div>

                <div class="catalog-capability-note <?php echo $catalog_ready ? 'is-ready' : 'is-warning'; ?>" role="status">
                    <i class="fa <?php echo $catalog_ready ? 'fa-check-circle' : 'fa-info-circle'; ?>" aria-hidden="true"></i>
                    <span id="catalog-capability-message"><?php echo htmlspecialchars((string)($catalog_capability_message ?? ''), ENT_QUOTES, 'UTF-8'); ?></span>
                </div>

                <?php if (!empty($catalog_search_recommendation_visible)): ?>
                    <div class="catalog-recommendation" role="status">
                        <div><strong>Поиск можно включить одним действием</strong><span>CMS и ИИ уже готовы. Рекомендуем режим «Умный баланс».</span></div>
                        <button type="button" class="btn btn-sm btn-primary" id="catalog-apply-recommended">Включить</button>
                    </div>
                <?php endif; ?>

                <section class="catalog-primary-control" aria-labelledby="catalog-search-toggle-title">
                    <label class="catalog-primary-copy" for="catalog-search-enabled">
                        <strong id="catalog-search-toggle-title" class="catalog-primary-title">Помогать клиентам находить товары</strong>
                        <span id="catalog-search-toggle-help">ИИ сможет находить точные модели, проверять наличие и давать ссылки на карточки.</span>
                    </label>
                    <div class="form-check form-switch catalog-master-switch">
                        <input class="form-check-input" type="checkbox" name="chat_productsearch" value="1" id="catalog-search-enabled" aria-describedby="catalog-search-toggle-help catalog-capability-message" <?php echo $catalog_search_enabled ? 'checked' : ''; ?>>
                        <label class="visually-hidden" for="catalog-search-enabled">Включить поиск товаров</label>
                    </div>
                </section>

                <div id="catalog-search-options" <?php echo $catalog_search_enabled ? '' : 'hidden'; ?>>
                    <fieldset class="catalog-policy" aria-describedby="catalog-policy-help">
                        <legend>Как работать с наличием</legend>
                        <p id="catalog-policy-help">Выберите готовое правило. Его можно изменить в любое время.</p>
                        <div class="catalog-policy-grid">
                            <label class="catalog-policy-option">
                                <input type="radio" name="chat_cms_availability_policy" value="smart" <?php echo $catalog_policy === 'smart' ? 'checked' : ''; ?>>
                                <span class="catalog-policy-copy"><strong>Умный баланс <em>Рекомендуем</em></strong><small>Точную модель найдёт всегда, а в подборе предложит доступные и предзаказные товары.</small></span>
                                <i class="fa fa-check" aria-hidden="true"></i>
                            </label>
                            <label class="catalog-policy-option">
                                <input type="radio" name="chat_cms_availability_policy" value="in_stock" <?php echo $catalog_policy === 'in_stock' ? 'checked' : ''; ?>>
                                <span class="catalog-policy-copy"><strong>Только в наличии</strong><small>Скрывает от ИИ все позиции, которые нельзя купить прямо сейчас.</small></span>
                                <i class="fa fa-check" aria-hidden="true"></i>
                            </label>
                            <label class="catalog-policy-option">
                                <input type="radio" name="chat_cms_availability_policy" value="all_active" <?php echo $catalog_policy === 'all_active' ? 'checked' : ''; ?>>
                                <span class="catalog-policy-copy"><strong>Весь активный каталог</strong><small>Показывает опубликованные позиции со строгим указанием их статуса.</small></span>
                                <i class="fa fa-check" aria-hidden="true"></i>
                            </label>
                        </div>
                    </fieldset>

                    <section class="catalog-preview" aria-labelledby="catalog-preview-title">
                        <div class="catalog-section-title">
                            <div><h6 id="catalog-preview-title">Проверить глазами покупателя</h6><p>Введите название, модель или артикул (SKU). Проверка не расходует AI-токены.</p></div>
                            <span><i class="fa fa-bolt" aria-hidden="true"></i> Без токенов</span>
                        </div>
                        <fieldset class="catalog-preview-intent">
                            <legend class="visually-hidden">Сценарий проверки</legend>
                            <label><input type="radio" name="intent" value="lookup" checked><span><i class="fa fa-crosshairs" aria-hidden="true"></i> Ищу конкретную модель</span></label>
                            <label><input type="radio" name="intent" value="recommendation"><span><i class="fa fa-magic" aria-hidden="true"></i> Подберите варианты</span></label>
                        </fieldset>
                        <div class="catalog-preview-form">
                            <div class="catalog-preview-input"><i class="fa fa-search" aria-hidden="true"></i><input type="search" id="catalog-preview-query" name="query" maxlength="160" placeholder="Например, HSU-09HNM103/R2" autocomplete="off"></div>
                            <button type="button" class="btn btn-primary" id="catalog-preview-button"
                                data-htmx-managed="1"
                                hx-post="index.php?route=setting/catalogSearchPreview"
                                hx-include="#easychat-settings-nonce,#catalog-preview-query,input[name='intent']:checked,input[name='chat_cms_availability_policy']:checked,input[name='chat_cms_show_exact_quantity']"
                                hx-target="#catalog-preview-results"
                                hx-swap="<?php echo htmlspecialchars(HtmxFragmentRenderer::settingsPanelSwap(), ENT_QUOTES, 'UTF-8'); ?>"
                                hx-sync="#catalog-preview-results:replace"
                                hx-disable="this"
                                hx-status:5xx="swap: outerHTML"
                                hx-indicator="#catalog-preview-button">Проверить</button>
                        </div>
                        <?php echo SettingFragments::catalogSearchPreview([], 'idle'); ?>
                    </section>

                    <section class="catalog-quality" aria-labelledby="catalog-quality-title">
                        <div class="catalog-section-title"><div><h6 id="catalog-quality-title">Качество поиска</h6><p>Быстрый поиск уже работает по актуальным данным магазина.</p></div></div>
                        <div class="catalog-quality-grid">
                            <div class="catalog-quality-option is-active"><i class="fa fa-bolt" aria-hidden="true"></i><div><strong>Быстрый</strong><span>Модели, SKU, названия, цена и наличие сразу из магазина.</span></div><b>Включён</b></div>
                            <div class="catalog-quality-option" id="catalog-semantic-card"><i class="fa fa-magic" aria-hidden="true"></i><div><strong>Расширенный</strong><span>Дополнительно понимает смысл описаний. Индексация выполняется в фоне и использует AI-токены.</span><small id="catalog-semantic-feedback" role="status" aria-live="polite"></small></div><button type="button" class="btn btn-sm <?php echo $catalog_semantic_enabled ? 'btn-outline-secondary' : 'btn-outline-primary'; ?>" id="btn-toggle-cms-semantic" data-enabled="<?php echo $catalog_semantic_enabled ? '1' : '0'; ?>"><?php echo $catalog_semantic_enabled ? 'Отключить' : 'Включить'; ?></button></div>
                        </div>
                        <input type="hidden" name="chat_cms_semantic_enabled" id="catalog-semantic-enabled" value="<?php echo $catalog_semantic_enabled ? '1' : '0'; ?>">
                        <input type="hidden" name="chat_cms_index_products" id="cms-index-products" value="<?php echo $catalog_semantic_enabled ? '1' : '0'; ?>">
                        <div id="catalog-semantic-actions" <?php echo $catalog_semantic_enabled ? '' : 'hidden'; ?>>
                            <button type="button" id="btn-trigger-cms-index" class="btn btn-sm btn-outline-primary"
                                data-htmx-managed="1" hx-post="index.php?route=setting/triggerCmsIndex"
                                hx-include="#easychat-settings-nonce" hx-target="#cms-index-status"
                                hx-swap="<?php echo htmlspecialchars(HtmxFragmentRenderer::settingsPanelSwap(), ENT_QUOTES, 'UTF-8'); ?>"
                                hx-sync="this:replace" hx-indicator="#btn-trigger-cms-index">
                                <i class="fa fa-refresh" aria-hidden="true"></i> Обновить индекс
                            </button>
                            <?php echo SettingFragments::cmsIndexStatus('idle', 'Обновление выполнится в фоне и не замедлит чат.'); ?>
                        </div>
                    </section>
                </div>

                <details class="catalog-advanced">
                    <summary><span><i class="fa fa-sliders" aria-hidden="true"></i> Дополнительные настройки</span><i class="fa fa-chevron-down" aria-hidden="true"></i></summary>
                    <div class="catalog-advanced-body">
                        <div class="row g-3">
                            <div class="col-12 catalog-connection-summary <?php echo !empty($catalog_connection['ready']) ? 'is-ready' : 'is-warning'; ?>">
                                <i class="fa <?php echo !empty($catalog_connection['ready']) ? 'fa-check-circle' : 'fa-exclamation-circle'; ?>" aria-hidden="true"></i>
                                <div><strong><?php echo !empty($catalog_connection['ready']) ? 'Каталог подключён автоматически' : 'Каталог пока не найден'; ?></strong><span><?php echo !empty($catalog_connection['ready']) ? htmlspecialchars($cms_edition_label . ': товары, цены и наличие доступны EasyChat.', ENT_QUOTES, 'UTF-8') : 'EasyChat повторит безопасную проверку после подключения CMS.'; ?></span></div>
                            </div>
                            <div class="col-md-6"><label class="form-label">Сколько вариантов возвращать</label><input type="number" class="form-control" name="chat_cms_search_limit" value="<?php echo (int)($chat_cms_search_limit ?? 5); ?>" min="1" max="50"></div>
                            <div class="col-md-6 catalog-toggle-row"><div><strong>Сообщать покупателю точное количество</strong><span>По умолчанию ИИ сообщает только статус наличия.</span></div><div class="form-check form-switch"><input class="form-check-input" type="checkbox" name="chat_cms_show_exact_quantity" value="1" id="catalog-show-quantity" <?php echo ($chat_cms_show_exact_quantity ?? '0') === '1' ? 'checked' : ''; ?>><label class="visually-hidden" for="catalog-show-quantity">Сообщать точное количество</label></div></div>
                        </div>

                        <div id="cms-embedding-fields" <?php echo $catalog_semantic_enabled ? '' : 'hidden'; ?>>
                            <h6>Что учитывать в расширенном поиске</h6>
                            <p>Эти поля относятся только к семантическому индексу. Быстрый поиск всегда проверяет название, модель и SKU.</p>
                            <div class="catalog-field-grid">
                                <?php foreach ([['chat_embedding_use_name', 'emb-name', 'Название', $chat_embedding_use_name], ['chat_embedding_use_desc', 'emb-desc', 'Описание', $chat_embedding_use_desc], ['chat_embedding_use_attrs', 'emb-attrs', 'Характеристики', $chat_embedding_use_attrs], ['chat_embedding_use_options', 'emb-options', 'Варианты и опции', $chat_embedding_use_options], ['chat_embedding_use_model', 'emb-model', 'Модель', $chat_embedding_use_model], ['chat_embedding_use_sku', 'emb-sku', 'SKU', $chat_embedding_use_sku]] as $field): ?>
                                    <label><input type="checkbox" name="<?php echo $field[0]; ?>" value="1" id="<?php echo $field[1]; ?>" <?php echo $field[3] == '1' ? 'checked' : ''; ?>><span><?php echo $field[2]; ?></span></label>
                                <?php endforeach; ?>
                            </div>
                            <label class="catalog-inline-check"><input type="checkbox" name="chat_cms_index_pages" value="1" id="cms-index-pages" <?php echo ($chat_cms_index_pages ?? '0') == '1' ? 'checked' : ''; ?>><span>Добавлять публичные страницы сайта в базу знаний</span></label>
                        </div>

                        <div class="catalog-diagnostics">
                            <label class="catalog-inline-check"><input type="checkbox" name="chat_cms_logging" value="1" id="cms-logging-status" <?php echo ($chat_cms_logging == '1') ? 'checked' : ''; ?>><span>Включить безопасную диагностику поиска</span></label>
                            <div id="cms-logging-console-block" <?php echo ($chat_cms_logging == '1') ? '' : 'hidden'; ?>><div class="catalog-log-actions"><strong>Последние события поиска</strong><span><button type="button" class="btn btn-sm btn-outline-primary" id="btn-refresh-cms-logs"><i class="fa fa-refresh" aria-hidden="true"></i> Обновить</button><button type="button" class="btn btn-sm btn-outline-danger" id="btn-clear-cms-logs"><i class="fa fa-trash" aria-hidden="true"></i> Очистить</button></span></div><pre id="cms-logs-console">Загрузка...</pre></div>
                        </div>
                    </div>
                </details>
            </div>

            <!-- PANEL 6: PROXY SETTINGS -->
            <div class="tab-pane fade animate__animated animate__fadeIn" id="proxy-panel" role="tabpanel">
                <h5 class="fw-bold text-dark mb-3" style="font-family: 'Outfit', sans-serif;"><i class="fa fa-shield text-secondary me-2"></i>Настройки прокси-сервера</h5>
                <p class="text-muted small mb-4">Если ваш сервер имеет ограниченный доступ к внешним ресурсам или внешние API-запросы блокируются (например, к серверам Telegram или OpenAI), вы можете перенаправить исходящий трафик через прокси-сервер.</p>

                <div class="card border border-light shadow-sm mb-4" style="border-radius: 12px; background: rgba(248, 249, 250, 0.4);">
                    <div class="card-body">

                        <div class="d-flex justify-content-between align-items-center mb-3">
                            <div>
                                <h6 class="fw-bold mb-1 text-dark" style="font-size: 14px;"><i class="fa fa-power-off text-secondary me-2"></i>Статус прокси</h6>
                                <span class="text-muted small">Включите, чтобы использовать прокси-сервер для внешних запросов к ИИ-моделям, мессенджерам, шлюзу Push-уведомлений и при скачивании вложений.</span>
                            </div>
                            <div class="form-check form-switch">
                                <input class="form-check-input" type="checkbox" name="chat_proxy_status" value="1" id="proxy-status" <?php echo ($chat_proxy_status == '1') ? 'checked' : ''; ?> style="width: 48px; height: 24px; cursor: pointer;">
                            </div>
                        </div>

                        <div id="proxy-fields">
                            <input type="hidden" name="chat_proxy_routes_json" id="proxy-routes-json" value="<?php echo htmlspecialchars($chat_proxy_routes_json, ENT_QUOTES, 'UTF-8'); ?>">
                            <div class="alert-info py-2 px-3 mb-3 border-0 animate__animated animate__fadeIn" style="border-radius: 8px; font-size: 12px; background: rgba(13, 202, 240, 0.08); color: #087990; line-height: 1.5;">
                                <i class="fa fa-info-circle me-2" style="font-size: 14px; vertical-align: middle;"></i>
                                Proxy применяется только к выбранным внешним маршрутам. Локальные вызовы EasyChat на этот же сайт всегда идут напрямую.
                            </div>
                            <hr style="border-color: #f1f5f9;">

                            <div class="row g-3">
                                <div class="col-md-8">
                                    <label class="form-label text-muted small">Хост прокси (IP или домен)</label>
                                    <input type="text" class="form-control" name="chat_proxy_host" value="<?php echo htmlspecialchars($chat_proxy_host); ?>" placeholder="например, 192.168.1.100 или proxy.example.com" style="border-radius: 8px;">
                                </div>
                                <div class="col-md-4">
                                    <label class="form-label text-muted small">Порт</label>
                                    <input type="number" class="form-control" name="chat_proxy_port" value="<?php echo htmlspecialchars($chat_proxy_port); ?>" placeholder="например, 8080" min="1" max="65535" style="border-radius: 8px;">
                                </div>
                            </div>

                            <hr style="border-color: #f1f5f9;" class="mt-3">
                            <p class="text-muted small mb-3">Данные авторизации (оставьте пустыми, если прокси без пароля):</p>

                            <div class="row g-3">
                                <div class="col-md-6">
                                    <label class="form-label text-muted small">Логин</label>
                                    <input type="text" class="form-control" name="chat_proxy_login" value="<?php echo htmlspecialchars($chat_proxy_login); ?>" placeholder="Логин (необязательно)" style="border-radius: 8px;" autocomplete="off">
                                </div>
                                <div class="col-md-6">
                                    <label class="form-label text-muted small">Пароль</label>
                                    <input type="password" class="form-control" name="chat_proxy_password" value="" placeholder="<?php echo $chat_proxy_password_saved ? 'Сохранен, оставьте пустым чтобы не менять' : 'Пароль (необязательно)'; ?>" style="border-radius: 8px;" autocomplete="new-password">
                                    <?php if ($chat_proxy_password_saved) { ?>
                                        <div class="form-check mt-2">
                                            <input class="form-check-input" type="checkbox" name="chat_proxy_password_clear" value="1" id="proxy-password-clear">
                                            <label class="form-check-label small text-muted" for="proxy-password-clear">Удалить сохраненный пароль proxy</label>
                                        </div>
                                    <?php } ?>
                                </div>
                            </div>

                            <hr style="border-color: #f1f5f9;" class="mt-4">

                            <div id="proxy-route-map" class="proxy-route-map">
                                <div class="d-flex flex-wrap justify-content-between align-items-start gap-3 mb-3">
                                    <div>
                                        <h6 class="fw-bold mb-1 text-dark" style="font-size: 14px;"><i class="fa fa-map-signs text-primary me-2"></i>Карта маршрутов</h6>
                                        <div class="text-muted small">Выберите, какие интеграции будут ходить через proxy. Остальные останутся напрямую.</div>
                                    </div>
                                    <div class="d-flex flex-wrap gap-2">
                                        <button type="button" class="btn btn-outline-primary btn-sm proxy-preset" data-preset="all" style="border-radius: 8px;"><i class="fa fa-shield me-1"></i>Все через proxy</button>
                                        <button type="button" class="btn btn-outline-secondary btn-sm proxy-preset" data-preset="ai_messengers" style="border-radius: 8px;"><i class="fa fa-magic me-1"></i>AI и мессенджеры</button>
                                        <button type="button" class="btn btn-outline-secondary btn-sm proxy-preset" data-preset="direct" style="border-radius: 8px;"><i class="fa fa-random me-1"></i>Все напрямую</button>
                                    </div>
                                </div>

                                <div id="proxy-route-summary" class="alert alert-light border small py-2 px-3 mb-3" style="border-radius: 10px;"></div>

                                <?php foreach ($proxy_route_groups as $group_key => $group_meta) { ?>
                                    <div class="border bg-white mb-3 proxy-route-group" data-proxy-group="<?php echo htmlspecialchars($group_key, ENT_QUOTES, 'UTF-8'); ?>" style="border-radius: 12px;">
                                        <div class="d-flex justify-content-between align-items-start gap-3 p-3 border-bottom" style="border-color: #eef2f7 !important;">
                                            <div>
                                                <div class="fw-semibold text-dark small"><?php echo htmlspecialchars((string)($group_meta['label'] ?? $group_key)); ?></div>
                                                <div class="text-muted small"><?php echo htmlspecialchars((string)($group_meta['description'] ?? '')); ?></div>
                                            </div>
                                            <div class="form-check form-switch m-0">
                                                <input class="form-check-input proxy-group-toggle" type="checkbox" value="1" id="proxy-group-<?php echo htmlspecialchars($group_key, ENT_QUOTES, 'UTF-8'); ?>" data-proxy-group-toggle="<?php echo htmlspecialchars($group_key, ENT_QUOTES, 'UTF-8'); ?>" style="width: 42px; height: 21px; cursor: pointer;">
                                                <label class="visually-hidden" for="proxy-group-<?php echo htmlspecialchars($group_key, ENT_QUOTES, 'UTF-8'); ?>">Переключить группу <?php echo htmlspecialchars((string)($group_meta['label'] ?? $group_key)); ?></label>
                                            </div>
                                        </div>
                                        <div class="p-2">
                                            <?php foreach ($proxy_route_profiles as $profile_key => $profile_meta) {
                                                if ((string)($profile_meta['group'] ?? '') !== (string)$group_key) {
                                                    continue;
                                                }
                                                $state = is_array($proxy_route_states[$profile_key] ?? null) ? $proxy_route_states[$profile_key] : [];
                                                $selected = !empty($state['selected']);
                                            ?>
                                                <div class="d-flex align-items-start justify-content-between gap-3 py-2 px-2 proxy-route-item" data-proxy-profile="<?php echo htmlspecialchars($profile_key, ENT_QUOTES, 'UTF-8'); ?>" data-proxy-group="<?php echo htmlspecialchars($group_key, ENT_QUOTES, 'UTF-8'); ?>" style="border-radius: 8px;">
                                                    <div>
                                                        <label class="fw-semibold text-dark small mb-1" for="proxy-route-<?php echo htmlspecialchars($profile_key, ENT_QUOTES, 'UTF-8'); ?>"><?php echo htmlspecialchars((string)($profile_meta['label'] ?? $profile_key)); ?></label>
                                                        <div class="text-muted small" style="line-height: 1.45;"><?php echo htmlspecialchars((string)($profile_meta['description'] ?? '')); ?></div>
                                                    </div>
                                                    <div class="form-check form-switch m-0 pt-1">
                                                        <input class="form-check-input proxy-route-toggle" type="checkbox" value="1" id="proxy-route-<?php echo htmlspecialchars($profile_key, ENT_QUOTES, 'UTF-8'); ?>" data-proxy-route="<?php echo htmlspecialchars($profile_key, ENT_QUOTES, 'UTF-8'); ?>" data-proxy-group="<?php echo htmlspecialchars($group_key, ENT_QUOTES, 'UTF-8'); ?>" <?php echo $selected ? 'checked' : ''; ?> style="width: 42px; height: 21px; cursor: pointer;">
                                                    </div>
                                                </div>
                                            <?php } ?>
                                        </div>
                                    </div>
                                <?php } ?>
                            </div>
                        </div>

                    </div>
                </div>
            </div>

            <!-- PANEL: SECURITY & BLOCKING -->
            <div class="tab-pane fade animate__animated animate__fadeIn" id="security-panel" role="tabpanel">
                <h5 class="fw-bold text-dark mb-1" style="font-family: 'Outfit', sans-serif;">
                    <i class="fa fa-shield text-danger me-2"></i><?php echo htmlspecialchars(easychat_t('settings.security_title', [], $easychat_locale ?? 'ru')); ?>
                </h5>
                <p class="text-muted small mb-4"><?php echo htmlspecialchars(easychat_t('settings.security_tab_desc', [], $easychat_locale ?? 'ru')); ?></p>

                <div class="row g-4">
                    <!-- Manual Block Card -->
                    <div class="col-md-6">
                        <div class="card h-100 border-0 shadow-sm rounded-4 p-4" style="background: #f8fafc; border: 1px solid #e2e8f0 !important; transition: transform 0.2s, box-shadow 0.2s;">
                            <div class="d-flex align-items-center mb-3">
                                <div class="rounded-3 p-2 bg-warning-subtle text-warning me-3" style="width: 42px; height: 42px; display: flex; align-items: center; justify-content: center; font-size: 20px;">
                                    <i class="fa fa-ban"></i>
                                </div>
                                <h6 class="fw-bold text-dark mb-0" style="font-family: 'Outfit', sans-serif;"><?php echo htmlspecialchars(easychat_t('settings.security_manual_title', [], $easychat_locale ?? 'ru')); ?></h6>
                            </div>
                            <p class="text-secondary small mb-0" style="line-height: 1.6;">
                                <?php echo htmlspecialchars(easychat_t('settings.security_manual_desc', [], $easychat_locale ?? 'ru')); ?>
                            </p>
                        </div>
                    </div>

                    <!-- Flood Control Card -->
                    <div class="col-md-6">
                        <div class="card h-100 border-0 shadow-sm rounded-4 p-4" style="background: #f8fafc; border: 1px solid #e2e8f0 !important; transition: transform 0.2s, box-shadow 0.2s;">
                            <div class="d-flex align-items-center mb-3">
                                <div class="rounded-3 p-2 bg-danger-subtle text-danger me-3" style="width: 42px; height: 42px; display: flex; align-items: center; justify-content: center; font-size: 20px;">
                                    <i class="fa fa-bolt"></i>
                                </div>
                                <h6 class="fw-bold text-dark mb-0" style="font-family: 'Outfit', sans-serif;"><?php echo htmlspecialchars(easychat_t('settings.security_flood_title', [], $easychat_locale ?? 'ru')); ?></h6>
                            </div>
                            <p class="text-secondary small mb-0" style="line-height: 1.6;">
                                <?php echo htmlspecialchars(easychat_t('settings.security_flood_desc', [], $easychat_locale ?? 'ru')); ?>
                            </p>
                        </div>
                    </div>

                    <!-- IP Message Limits Card -->
                    <div class="col-md-6">
                        <div class="card h-100 border-0 shadow-sm rounded-4 p-4" style="background: #f8fafc; border: 1px solid #e2e8f0 !important; transition: transform 0.2s, box-shadow 0.2s;">
                            <div class="d-flex align-items-center mb-3">
                                <div class="rounded-3 p-2 bg-primary-subtle text-primary me-3" style="width: 42px; height: 42px; display: flex; align-items: center; justify-content: center; font-size: 20px;">
                                    <i class="fa fa-globe"></i>
                                </div>
                                <h6 class="fw-bold text-dark mb-0" style="font-family: 'Outfit', sans-serif;"><?php echo htmlspecialchars(easychat_t('settings.security_ip_title', [], $easychat_locale ?? 'ru')); ?></h6>
                            </div>
                            <p class="text-secondary small mb-0" style="line-height: 1.6;">
                                <?php echo htmlspecialchars(easychat_t('settings.security_ip_desc', [], $easychat_locale ?? 'ru')); ?>
                            </p>
                        </div>
                    </div>

                    <!-- IP Session Limits Card -->
                    <div class="col-md-6">
                        <div class="card h-100 border-0 shadow-sm rounded-4 p-4" style="background: #f8fafc; border: 1px solid #e2e8f0 !important; transition: transform 0.2s, box-shadow 0.2s;">
                            <div class="d-flex align-items-center mb-3">
                                <div class="rounded-3 p-2 bg-info-subtle text-info me-3" style="width: 42px; height: 42px; display: flex; align-items: center; justify-content: center; font-size: 20px;">
                                    <i class="fa fa-users"></i>
                                </div>
                                <h6 class="fw-bold text-dark mb-0" style="font-family: 'Outfit', sans-serif;"><?php echo htmlspecialchars(easychat_t('settings.security_session_title', [], $easychat_locale ?? 'ru')); ?></h6>
                            </div>
                            <p class="text-secondary small mb-0" style="line-height: 1.6;">
                                <?php echo htmlspecialchars(easychat_t('settings.security_session_desc', [], $easychat_locale ?? 'ru')); ?>
                            </p>
                        </div>
                    </div>
                </div>

                <div class="alert alert-info p-4 mt-4 mb-4 d-block" style="border-radius: 12px; font-size: 13.5px; border: 1px solid rgba(13, 110, 253, 0.25); background-color: rgba(13, 110, 253, 0.05); color: #084298; line-height: 1.6;">
                    <h6 class="fw-bold mb-2 text-dark" style="font-family: 'Outfit', sans-serif;"><i class="fa fa-info-circle text-primary me-2"></i> Дополнительная информация для интеграции</h6>
                    <p class="mb-0">Защита от флуда по IP работает полностью автоматически. В случае срабатывания ограничений по IP, заблокированные запросы будут отклонены веб-сервером EasyChat еще на этапе инициализации виджета, снижая нагрузку на базу данных и ресурсы сервера.</p>
                </div>
            </div>

            <!-- PANEL: CRON PLANNER -->
            <div class="tab-pane fade animate__animated animate__fadeIn" id="cron-panel" role="tabpanel">
                <h5 class="fw-bold text-dark mb-1" style="font-family: 'Outfit', sans-serif;">
                    <i class="fa fa-clock-o text-warning me-2"></i><?php echo htmlspecialchars(easychat_t('settings.cron_title', [], $easychat_locale ?? 'ru')); ?>
                </h5>
                <p class="text-muted small mb-4">Настройка автоматического запуска фоновых процессов EasyChat для отправки сообщений, обработки очереди и работы искусственного интеллекта.</p>

                <?php $scheduler_status = (string)($scheduler_health['status'] ?? 'waiting'); ?>
                <div class="scheduler-health-card scheduler-health-<?php echo htmlspecialchars($scheduler_status, ENT_QUOTES, 'UTF-8'); ?>" id="scheduler-health-card" aria-live="polite">
                    <div class="scheduler-health-icon"><i class="fa <?php echo $scheduler_status === 'healthy' ? 'fa-check' : 'fa-clock-o'; ?>" aria-hidden="true"></i></div>
                    <div class="scheduler-health-copy"><strong id="scheduler-health-title"><?php echo $scheduler_status === 'healthy' ? 'Фоновые задачи работают' : 'Проверим фоновые задачи'; ?></strong><span id="scheduler-health-detail"><?php echo $scheduler_status === 'healthy' ? 'Последний запуск подтверждён. Очередь и расширенный поиск обрабатываются автоматически.' : 'После настройки запустите проверку: EasyChat дождётся реального выполнения задания.'; ?></span></div>
                    <button type="button" class="btn btn-primary" id="btn-scheduler-probe"><i class="fa fa-play me-1" aria-hidden="true"></i> Проверить запуск</button>
                </div>

                <!-- Why is it needed alert/card -->
                <div class="card border-0 shadow-sm rounded-4 p-4 mb-4" style="background: #f8fafc; border: 1px solid #e2e8f0 !important;">
                    <h6 class="fw-bold text-dark mb-3" style="font-family: 'Outfit', sans-serif;">
                        <i class="fa fa-info-circle text-primary me-2"></i>Зачем нужен планировщик?
                    </h6>
                    <p class="text-secondary small mb-3" style="line-height: 1.6;">
                        EasyChat использует фоновую очередь задач для выполнения тяжелых операций без замедления работы пользователей и операторов. Планировщик (Cron) запускает фоновый процесс каждую минуту для выполнения следующих задач:
                    </p>
                    <ul class="text-secondary small ps-3 mb-0" style="line-height: 1.6;">
                        <li class="mb-2"><b>ИИ-консультант:</b> Отправка вопросов нейросети и генерация ответов для клиентов.</li>
                        <li class="mb-2"><b>Эмбеддинги (векторная база знаний):</b> Индексация товаров и страниц сайта для точных ответов ИИ.</li>
                        <li class="mb-2"><b>Мессенджеры:</b> Надежная отправка сообщений во внешние каналы связи (включая мессенджер MAX).</li>
                        <li><b>Очистка:</b> Сброс зависших задач и автоматическое обслуживание базы данных.</li>
                    </ul>
                </div>

                <?php if (($cron_mode ?? 'standalone') === 'wordpress_org') : ?>
                <div class="card border-0 shadow-sm rounded-4 p-4 mb-4" style="background: #ffffff; border: 1px solid #e2e8f0 !important;">
                    <div class="d-flex align-items-center mb-3">
                        <div class="rounded-3 p-2 bg-success-subtle text-success me-3" style="width: 42px; height: 42px; display: flex; align-items: center; justify-content: center; font-size: 20px;">
                            <i class="fa fa-wordpress"></i>
                        </div>
                        <div>
                            <h6 class="fw-bold text-dark mb-0" style="font-family: 'Outfit', sans-serif;">WordPress.org edition: WP-Cron включен автоматически</h6>
                            <span class="text-muted small">EasyChat запускает очередь через встроенный планировщик WordPress.</span>
                        </div>
                    </div>

                    <p class="text-secondary small mb-3" style="line-height: 1.6;">
                        Отдельный файл <code>cron.php</code> и секретная HTTP-ссылка в WordPress.org версии не используются. Это безопаснее для модерации WordPress.org: фоновые задачи запускаются только через нативный WP-Cron или через системный cron, который вызывает стандартный файл WordPress.
                    </p>

                    <?php if (!empty($wp_cron_disabled)) : ?>
                        <div class="alert alert-warning small mb-3" style="border-radius: 10px;">
                            В этой установке включен <code>DISABLE_WP_CRON</code>. Автоматический запуск при посещениях сайта отключен, поэтому настройте системный cron на вызов <code>wp-cron.php</code> каждую минуту.
                        </div>
                    <?php endif; ?>

                    <p class="text-secondary small mb-3">Для стабильного production-запуска на малопосещаемых сайтах добавьте на хостинге задачу каждую минуту:</p>

                    <div class="position-relative mb-3">
                        <pre class="bg-dark text-light p-3 rounded-3 small mb-0" style="font-family: 'Courier New', Courier, monospace; overflow-x: auto; background-color: #0b0f19 !important; border: 1px solid rgba(255,255,255,0.05); padding-right: 120px !important;"><code id="cron-wp-code">* * * * * curl -s "<?php echo htmlspecialchars($wp_cron_url ?? ''); ?>" > /dev/null 2>&1</code></pre>
                        <button type="button" class="btn btn-outline-light btn-sm position-absolute" id="btn-copy-cron-wp" style="top: 10px; right: 10px; border-radius: 6px; font-size: 11px;">
                            <i class="fa fa-copy me-1"></i> Копировать
                        </button>
                    </div>

                    <p class="text-secondary small mb-0">Если сайт получает регулярный трафик, WP-Cron будет запускаться автоматически. Системный cron нужен для более точного запуска каждую минуту и для сайтов с низкой посещаемостью.</p>
                </div>
                <?php elseif (($cron_mode ?? 'standalone') === 'webasyst_cli') : ?>
                <div class="card border-0 shadow-sm rounded-4 p-4 mb-4" style="background: #ffffff; border: 1px solid #e2e8f0 !important;">
                    <div class="d-flex align-items-center mb-3">
                        <div class="rounded-3 p-2 bg-success-subtle text-success me-3" style="width: 42px; height: 42px; display: flex; align-items: center; justify-content: center; font-size: 20px;">
                            <i class="fa fa-terminal"></i>
                        </div>
                        <div>
                            <h6 class="fw-bold text-dark mb-0" style="font-family: 'Outfit', sans-serif;">Webasyst / Shop-Script: CLI-планировщик</h6>
                            <span class="text-muted small">EasyChat запускает очередь через нативный Webasyst CLI controller.</span>
                        </div>
                    </div>

                    <p class="text-secondary small mb-3" style="line-height: 1.6;">
                        В Webasyst-сборке не используется публичная ссылка на <code>easychat/cron.php</code> и не нужен <code>CRON_SECRET</code>. Для фоновых задач добавьте на хостинге стандартную Webasyst CLI-команду каждую минуту:
                    </p>

                    <div class="position-relative mb-3">
                        <pre class="bg-dark text-light p-3 rounded-3 small mb-0" style="font-family: 'Courier New', Courier, monospace; overflow-x: auto; background-color: #0b0f19 !important; border: 1px solid rgba(255,255,255,0.05); padding-right: 120px !important;"><code id="cron-webasyst-code">* * * * * <?php echo htmlspecialchars($webasyst_cron_command ?? 'php /path/to/webasyst/cli.php shop easychatPluginQueue'); ?> >> /dev/null 2>&1</code></pre>
                        <button type="button" class="btn btn-outline-light btn-sm position-absolute" id="btn-copy-cron-webasyst" style="top: 10px; right: 10px; border-radius: 6px; font-size: 11px;">
                            <i class="fa fa-copy me-1"></i> Копировать
                        </button>
                    </div>

                    <p class="text-secondary small mb-0">Статус очереди и эта команда также показаны в настройках плагина EasyChat внутри Webasyst.</p>
                </div>
                <?php elseif (($cron_mode ?? 'standalone') === 'bitrix_agent') : ?>
                <div class="card border-0 shadow-sm rounded-4 p-4 mb-4" style="background: #ffffff; border: 1px solid #e2e8f0 !important;">
                    <div class="d-flex align-items-center mb-3">
                        <div class="rounded-3 p-2 bg-success-subtle text-success me-3" style="width: 42px; height: 42px; display: flex; align-items: center; justify-content: center; font-size: 20px;">
                            <i class="fa fa-cogs"></i>
                        </div>
                        <div>
                            <h6 class="fw-bold text-dark mb-0" style="font-family: 'Outfit', sans-serif;">1C-Битрикс: агенты включены автоматически</h6>
                            <span class="text-muted small">EasyChat регистрирует Bitrix Agent при установке модуля.</span>
                        </div>
                    </div>

                    <p class="text-secondary small mb-3" style="line-height: 1.6;">
                        Фоновые задачи выполняет агент <code>WellsoftEasyChatAdapter::runQueueAgent();</code>. Отдельную ссылку на <code>easychat/cron.php</code> и <code>CRON_SECRET</code> для штатной работы настраивать не нужно.
                    </p>

                    <p class="text-secondary small mb-3">Для более точного production-запуска настройте стандартный Bitrix cron для всех агентов:</p>

                    <div class="position-relative mb-3">
                        <pre class="bg-dark text-light p-3 rounded-3 small mb-0" style="font-family: 'Courier New', Courier, monospace; overflow-x: auto; background-color: #0b0f19 !important; border: 1px solid rgba(255,255,255,0.05); padding-right: 120px !important;"><code id="cron-bitrix-code">* * * * * <?php echo htmlspecialchars($bitrix_cron_events_command ?? 'php /path/to/site/bitrix/modules/main/tools/cron_events.php'); ?> >> /dev/null 2>&1</code></pre>
                        <button type="button" class="btn btn-outline-light btn-sm position-absolute" id="btn-copy-cron-bitrix" style="top: 10px; right: 10px; border-radius: 6px; font-size: 11px;">
                            <i class="fa fa-copy me-1"></i> Копировать
                        </button>
                    </div>

                    <p class="text-secondary small mb-0">Статус агента, очередь и ручной запуск доступны в настройках модуля EasyChat в админке Bitrix.</p>
                </div>
                <?php elseif (($cron_mode ?? 'standalone') === 'opencart_cron') : ?>
                <div class="card border-0 shadow-sm rounded-4 p-4 mb-4" style="background: #ffffff; border: 1px solid #e2e8f0 !important;">
                    <div class="d-flex align-items-center mb-3">
                        <div class="rounded-3 p-2 bg-success-subtle text-success me-3" style="width: 42px; height: 42px; display: flex; align-items: center; justify-content: center; font-size: 20px;">
                            <i class="fa fa-shopping-cart"></i>
                        </div>
                        <div>
                            <h6 class="fw-bold text-dark mb-0" style="font-family: 'Outfit', sans-serif;">OpenCart 4: встроенный планировщик Cron</h6>
                            <span class="text-muted small">EasyChat зарегистрировал задачу в стандартном списке OpenCart Extension &gt; Cron.</span>
                        </div>
                    </div>

                    <p class="text-secondary small mb-3" style="line-height: 1.6;">
                        В OpenCart 4 очередь EasyChat запускается через штатный маршрут <code>cron/cron</code>. Отдельную прямую ссылку на файл EasyChat для обычной работы настраивать не нужно.
                    </p>

                    <p class="text-secondary small mb-3">Для стабильного production-запуска добавьте на хостинге задачу каждую минуту:</p>

                    <div class="position-relative mb-3">
                        <pre class="bg-dark text-light p-3 rounded-3 small mb-0" style="font-family: 'Courier New', Courier, monospace; overflow-x: auto; background-color: #0b0f19 !important; border: 1px solid rgba(255,255,255,0.05); padding-right: 120px !important;"><code id="cron-opencart-code">* * * * * wget "<?php echo htmlspecialchars($opencart_cron_url ?? '/index.php?route=cron/cron'); ?>" --read-timeout=5400 &gt; /dev/null 2&gt;&amp;1</code></pre>
                        <button type="button" class="btn btn-outline-light btn-sm position-absolute" id="btn-copy-cron-opencart" style="top: 10px; right: 10px; border-radius: 6px; font-size: 11px;">
                            <i class="fa fa-copy me-1"></i> Копировать
                        </button>
                    </div>

                    <p class="text-secondary small mb-0">OpenCart сам проверит зарегистрированные задачи и вызовет EasyChat queue runner. В опубликованном пакете OpenCart 3 используется обычный self-hosted способ ниже.</p>
                </div>
                <?php else : ?>
                <!-- CLI Method (Recommended) -->
                <div class="card border-0 shadow-sm rounded-4 p-4 mb-4" style="background: #ffffff; border: 1px solid #e2e8f0 !important;">
                    <div class="d-flex align-items-center mb-3">
                        <div class="rounded-3 p-2 bg-success-subtle text-success me-3" style="width: 42px; height: 42px; display: flex; align-items: center; justify-content: center; font-size: 20px;">
                            <i class="fa fa-terminal"></i>
                        </div>
                        <div>
                            <h6 class="fw-bold text-dark mb-0" style="font-family: 'Outfit', sans-serif;">Способ 1: Запуск через консоль (Рекомендуется)</h6>
                            <span class="text-muted small">Работает быстрее и стабильнее всего, подходит для большинства хостингов.</span>
                        </div>
                    </div>
                    
                    <p class="text-secondary small mb-3">Добавьте в планировщик задач (Cron) на вашем хостинге следующую команду для выполнения <b>каждую минуту</b>:</p>
                    <?php if (empty($cron_cli_runtime['success'])) : ?>
                        <?php $cron_cli_blocked = ($cron_cli_command ?? '') === ''; ?>
                        <div class="alert <?php echo $cron_cli_blocked ? 'alert-danger' : 'alert-warning'; ?> small py-2 px-3 mb-3" role="alert" style="border-radius: 10px;">
                            <div class="fw-semibold mb-1"><i class="fa fa-exclamation-triangle me-1"></i><?php echo $cron_cli_blocked ? 'PHP для планировщика пока не готов' : 'PHP CLI не удалось проверить автоматически'; ?></div>
                            <div><?php echo htmlspecialchars((string)($cron_cli_runtime['message'] ?? 'Не найден совместимый PHP CLI 7.4 или выше.')); ?></div>
                        </div>
                    <?php else : ?>
                        <div class="d-flex flex-wrap align-items-center gap-2 text-muted small mb-2">
                            <span class="badge bg-success-subtle text-success border border-success-subtle"><i class="fa fa-check-circle me-1"></i>PHP CLI проверен</span>
                            <span>Версия <?php echo htmlspecialchars((string)($cron_cli_runtime['version'] ?? '')); ?> · база данных: <?php echo htmlspecialchars((string)($cron_cli_runtime['database_extension'] ?? 'готова')); ?></span>
                        </div>
                        <div class="easychat-cron-runtime-path mb-3">
                            <span>Подтверждённый интерпретатор</span>
                            <code><?php echo htmlspecialchars((string)($cron_cli_runtime['binary'] ?? '')); ?></code>
                            <?php if (($cron_cli_runtime['resolved_binary'] ?? '') !== ''
                                && ($cron_cli_runtime['resolved_binary'] ?? '') !== ($cron_cli_runtime['binary'] ?? '')) : ?>
                                <small class="text-muted d-block mt-1">Системная цель этого alias: <code><?php echo htmlspecialchars((string)$cron_cli_runtime['resolved_binary']); ?></code>. EasyChat отдельно подтвердил, что она работает как PHP CLI.</small>
                            <?php endif; ?>
                        </div>
                    <?php endif; ?>
                    <div class="easychat-cron-panel-mode mb-3">
                        <span class="easychat-cron-panel-mode-icon"><i class="fa fa-terminal" aria-hidden="true"></i></span>
                        <div>
                            <strong>Тип задания в панели: «Произвольная команда»</strong>
                            <span>Вставьте строку целиком. Не выбирайте «PHP-скрипт»: такой режим сам добавляет интерпретатор и попытается открыть <code>flock</code> как PHP-файл.</span>
                        </div>
                    </div>
                    <?php if (($cron_cli_command ?? '') !== '') : ?>
                        <div class="d-flex align-items-center gap-2 mb-2">
                            <span class="badge bg-success-subtle text-success border border-success-subtle"><i class="fa fa-shield me-1"></i>Вся цепочка проверена</span>
                            <span class="text-muted small">EasyChat совместно запустил абсолютные пути <code>flock</code> и PHP CLI. Внешняя блокировка не даст двум процессам выполняться одновременно.<?php if (!empty($cron_protected_chain['conflict_exit_normalized'])) : ?> Повторный пересекающийся запуск будет безопасно пропущен без ложной ошибки Cron.<?php endif; ?></span>
                        </div>
                        <?php if (empty($cron_protected_chain['conflict_exit_normalized'])) : ?>
                            <div class="alert alert-warning small py-2 px-3 mb-3" role="status">Этот системный <code>flock</code> не умеет возвращать тихий код при пересечении задач. Код <code>1</code> в момент уже работающего запуска может означать безопасный пропуск, а не ошибку PHP.</div>
                        <?php endif; ?>
                        <div class="text-muted small mb-2"><i class="fa fa-clock-o me-1"></i>Расписание в панели хостинга: каждую минуту (<code>* * * * *</code>). В поле команды вставьте строку ниже без расписания.</div>
                        <div class="position-relative mb-2 easychat-cron-command-box">
                            <pre class="small mb-0"><code id="cron-cli-code"><?php echo htmlspecialchars($cron_cli_command); ?></code></pre>
                            <button type="button" class="btn btn-outline-light btn-sm position-absolute easychat-cron-command-copy" id="btn-copy-cron-cli">
                                <i class="fa fa-copy me-1"></i> Копировать
                            </button>
                        </div>
                    <?php else : ?>
                        <div class="alert alert-warning small py-2 px-3 mb-3" role="alert">
                            <div class="fw-semibold mb-1"><i class="fa fa-exclamation-triangle me-1"></i>Команда с flock не подтверждена</div>
                            <div><?php echo htmlspecialchars((string)($cron_protected_chain['message'] ?? $cron_flock_runtime['message'] ?? 'Используйте короткий проверенный вариант ниже.')); ?></div>
                        </div>
                        <code id="cron-cli-code" hidden></code>
                        <button type="button" id="btn-copy-cron-cli" disabled hidden></button>
                    <?php endif; ?>
                    <details class="easychat-cron-alt mb-3" <?php echo ($cron_cli_command ?? '') === '' ? 'open' : ''; ?>>
                        <summary><i class="fa fa-code me-1"></i> Короткий вариант без внешнего flock</summary>
                        <div class="position-relative mt-2 easychat-cron-command-box easychat-cron-command-box-compact">
                            <pre class="small mb-0"><code id="cron-cli-simple-code"><?php echo htmlspecialchars(($cron_cli_simple_command ?? '') !== '' ? $cron_cli_simple_command : 'Проверенная команда пока недоступна'); ?></code></pre>
                            <button type="button" class="btn btn-outline-light btn-sm position-absolute easychat-cron-command-copy" id="btn-copy-cron-cli-simple" <?php echo ($cron_cli_simple_command ?? '') === '' ? 'disabled' : ''; ?>>
                                <i class="fa fa-copy me-1"></i> Копировать
                            </button>
                        </div>
                        <div class="text-muted small mt-2">Короткий вариант нужен только для хостингов без системного <code>flock</code>. Если сомневаетесь, оставьте рекомендуемую команду выше.</div>
                    </details>

                    <p class="text-secondary small mb-0"><b>Важно:</b> Cron должен запускать файл через PHP CLI 7.4 или выше. Не добавляйте в планировщик только путь к <code>cron.php</code>: прямой запуск PHP-файла на shared-hosting обычно завершится ошибкой <code>Permission denied</code>. Используйте абсолютный интерпретатор из подтверждённой команды: короткое имя <code>php</code> может вести на устаревшую системную версию. Если поддержка хостинга говорит, что <code>flock</code> недоступен, раскройте короткий вариант выше.</p>
                </div>

                <!-- HTTP Method (Fallback) -->
                <div class="card border-0 shadow-sm rounded-4 p-4 mb-4" style="background: #ffffff; border: 1px solid #e2e8f0 !important;">
                    <div class="d-flex align-items-center mb-3">
                        <div class="rounded-3 p-2 bg-info-subtle text-info me-3" style="width: 42px; height: 42px; display: flex; align-items: center; justify-content: center; font-size: 20px;">
                            <i class="fa fa-globe"></i>
                        </div>
                        <div>
                            <h6 class="fw-bold text-dark mb-0" style="font-family: 'Outfit', sans-serif;">Способ 2: Запуск по ссылке (HTTP-запрос)</h6>
                            <span class="text-muted small">Используйте, если ваш хостинг не поддерживает консольный запуск или заблокировал CLI.</span>
                        </div>
                    </div>
                    
                    <p class="text-secondary small mb-3">Создайте в планировщике хостинга задачу на вызов URL-адреса каждую минуту. Команда вызова с помощью утилиты <code>wget</code> или <code>curl</code>:</p>
                    
                    <div class="position-relative mb-3">
                        <pre class="bg-dark text-light p-3 rounded-3 small mb-0" style="font-family: 'Courier New', Courier, monospace; overflow-x: auto; background-color: #0b0f19 !important; border: 1px solid rgba(255,255,255,0.05); padding-right: 120px !important;"><code id="cron-http-code">* * * * * curl -s "<?php echo htmlspecialchars($cron_url ?? ''); ?>" > /dev/null</code></pre>
                        <button type="button" class="btn btn-outline-light btn-sm position-absolute" id="btn-copy-cron-http" style="top: 10px; right: 10px; border-radius: 6px; font-size: 11px;">
                            <i class="fa fa-copy me-1"></i> Копировать
                        </button>
                    </div>

                    <p class="text-secondary small mb-0">Для защиты от посторонних вызовов в ссылке используется секретный ключ безопасности (параметр <code>secret</code>), сгенерированный автоматически при установке EasyChat.</p>
                </div>

                <!-- Hosting specifics & Support -->
                <div class="alert-warning p-4 mb-0" style="border-radius: 12px; font-size: 13.5px; border: 1px solid rgba(245, 158, 11, 0.25); background-color: rgba(245, 158, 11, 0.05); color: #92400e; line-height: 1.6;">
                    <h6 class="fw-bold mb-2 text-dark" style="font-family: 'Outfit', sans-serif;"><i class="fa fa-question-circle text-warning me-2"></i> Не получается настроить?</h6>
                    <p class="mb-2">Панели управления хостингов сильно различаются. Вот краткие подсказки по популярным панелям:</p>
                    <ul class="ps-3 mb-3">
                        <li class="mb-1"><b>cPanel / ISPmanager:</b> Найдите раздел «Планировщик задач (Cron)», установите периодичность «Каждую минуту» (обычно это выбор из готовых шаблонов), в поле «Команда» вставьте целиком команду из Способа 1.</li>
                        <li class="mb-1"><b>Beget:</b> В «Мастере заданий» выберите только тип <b>«Произвольная команда»</b> и вставьте подтверждённую строку целиком. Не выбирайте «PHP-скрипт»: Beget сам добавит интерпретатор и ошибочно попытается выполнить <code>flock</code> как PHP-файл. Версия PHP сайта на Cron автоматически не распространяется. <a href="https://beget.com/ru/kb/manual/crontab" target="_blank" rel="noopener noreferrer">Официальная инструкция Beget</a>.</li>
                        <li class="mb-1"><b>Рег.ру / TimeWeb:</b> Перейдите в раздел планировщика, создайте задачу и укажите полную CLI-команду через PHP-интерпретатор, а не только путь к файлу.</li>
                    </ul>
                    <p class="mb-0 fw-bold"><i class="fa fa-envelope-o me-1"></i> Если вы сомневаетесь или не понимаете, как это сделать, скопируйте команду Способа 1 (или Способа 2) и обратитесь в службу поддержки вашего хостинга. Напишите им: <i>«Здравствуйте! Пожалуйста, добавьте в планировщик Cron запуск этого скрипта каждую минуту: [вставьте скопированную команду]»</i>. Любая поддержка хостинга сделает это за 1 минуту.</p>
                </div>
                <?php endif; ?>
            </div>

        </div>

        <!-- Submit Button -->
        <div class="d-flex justify-content-end border-top pt-4 mt-4">
            <button type="submit" id="btn-save-settings" class="btn btn-primary easychat-admin-primary-action px-5 py-2.5">
                <i class="fa fa-check me-2"></i> Сохранить настройки
            </button>
        </div>
    </form>
</div>

	
<div class="modal fade easytokens-gift-modal" id="easytokens-gift-modal" tabindex="-1" aria-labelledby="easytokens-gift-modal-title" aria-hidden="true">
    <div class="modal-dialog modal-dialog-centered easytokens-gift-dialog">
        <div class="modal-content border-0 shadow-lg easytokens-gift-modal-panel">
            <div class="modal-header border-0 pb-0 easytokens-gift-modal-header">
                <div class="easytokens-gift-modal-heading">
                    <div class="easytokens-gift-modal-orb" aria-hidden="true">
                        <i class="fa fa-bolt"></i>
                    </div>
                    <div>
                        <div class="easytokens-gift-kicker mb-1"><?php echo htmlspecialchars(easychat_t('settings.easytokens_gift_modal_kicker', [], $easychat_locale ?? 'ru')); ?></div>
                        <h5 class="modal-title fw-bold text-dark mb-0" id="easytokens-gift-modal-title"><?php echo htmlspecialchars(easychat_t('settings.easytokens_gift_modal_title', [], $easychat_locale ?? 'ru')); ?></h5>
                    </div>
                </div>
                <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="<?php echo htmlspecialchars(easychat_t('common.close', [], $easychat_locale ?? 'ru')); ?>"></button>
            </div>
            <div class="modal-body pt-3 easytokens-gift-modal-body">
                <div class="easytokens-gift-value-strip" aria-hidden="true">
                    <span><i class="fa fa-magic"></i> <?php echo htmlspecialchars(easychat_t('settings.easytokens_gift_modal_value_api', [], $easychat_locale ?? 'ru')); ?></span>
                    <span><i class="fa fa-shield"></i> <?php echo htmlspecialchars(easychat_t('settings.easytokens_gift_modal_value_safe', [], $easychat_locale ?? 'ru')); ?></span>
                </div>
                <p class="easytokens-gift-modal-text">
                    <?php echo htmlspecialchars(easychat_t('settings.easytokens_gift_modal_text', [], $easychat_locale ?? 'ru')); ?>
                </p>
                <label class="form-label text-muted small" for="easytokens-gift-modal-email"><?php echo htmlspecialchars(easychat_t('settings.easytokens_gift_email_label', [], $easychat_locale ?? 'ru')); ?></label>
                <input type="email" class="form-control" id="easytokens-gift-modal-email" value="<?php echo htmlspecialchars($easychat_gift_email_value, ENT_QUOTES, 'UTF-8'); ?>" placeholder="owner@example.com" autocomplete="email">
                <div class="easytokens-gift-safe-note">
                    <?php echo htmlspecialchars(easychat_t('settings.easytokens_gift_safe_note', [], $easychat_locale ?? 'ru')); ?>
                </div>
                <div class="easytokens-gift-status mt-3" id="easytokens-gift-modal-status" aria-live="polite"></div>
            </div>
            <div class="modal-footer border-0 pt-0 easytokens-gift-modal-footer">
                <button type="button" class="btn btn-light easytokens-gift-secondary" id="btn-easytokens-gift-modal-manual" data-bs-dismiss="modal"><?php echo htmlspecialchars(easychat_t('settings.easytokens_gift_manual_short', [], $easychat_locale ?? 'ru')); ?></button>
                <button type="button" class="btn btn-primary easytokens-gift-claim" id="btn-easytokens-gift-modal-claim">
                    <i class="fa fa-bolt me-2"></i><?php echo htmlspecialchars(easychat_t('settings.easytokens_gift_claim', [], $easychat_locale ?? 'ru')); ?>
                </button>
            </div>
        </div>
    </div>
</div>


<script type="text/javascript">
window.EasyChatSettingConfig = {
    proxyRouteProfiles: <?php echo json_encode(array_keys($proxy_route_profiles), JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); ?>,
    proxyRouteMeta: <?php echo json_encode($proxy_route_profiles, JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); ?>,
    proxyRouteInitial: <?php echo $chat_proxy_routes_json !== '' ? $chat_proxy_routes_json : '{}'; ?>,
    easytokensGiftStatus: '<?php echo htmlspecialchars($chat_easytokens_gift_status, ENT_QUOTES); ?>',
    easytokensGiftOfferSeen: '<?php echo htmlspecialchars($chat_easytokens_gift_offer_seen, ENT_QUOTES); ?>',
    aiProviderDefaultModels: <?php echo json_encode($chat_ai_provider_default_models, JSON_UNESCAPED_SLASHES); ?>,
    aiProviderPlaceholders: <?php echo json_encode(array_map(static function ($option) {
        return (string)$option['placeholder'];
    }, $chat_ai_provider_options), JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); ?>,
    i18n: <?php echo json_encode(\EasyChat\Library\I18n::dictionary($easychat_locale ?? 'ru', [
        'common.error',
        'common.ready',
        'common.warning',
        'settings.easytokens_balance_unchecked',
        'settings.easytokens_balance_checking',
        'settings.easytokens_balance_loading_hint',
        'settings.easytokens_balance_updating',
        'settings.easytokens_balance_error_value',
        'settings.easytokens_balance_error_hint',
        'settings.easytokens_balance_error_status',
        'settings.easytokens_balance_tokens',
        'settings.easytokens_balance_low_hint',
        'settings.easytokens_balance_ready_hint',
        'settings.easytokens_balance_spent',
        'settings.easytokens_balance_requests',
        'settings.easytokens_balance_low_status',
        'settings.easytokens_balance_updated_status',
        'settings.easytokens_balance_updated_at',
        'settings.easytokens_balance_missing_key_hint',
        'settings.easytokens_balance_no_key_short',
        'settings.easytokens_balance_no_response',
        'settings.easytokens_balance_network_error',
        'settings.easytokens_gift_retryable',
        'settings.easytokens_gift_pending',
        'settings.easytokens_gift_email_required',
        'settings.easytokens_gift_requesting',
        'settings.easytokens_gift_requesting_balance',
        'settings.easytokens_gift_connected_balance',
        'settings.easytokens_gift_failed_key',
        'settings.easytokens_gift_failed',
        'settings.easytokens_gift_network_key',
        'settings.easytokens_gift_network',
        'settings.easytokens_gift_refresh_requires_key',
        'settings.easytokens_gift_topup_requires_key',
        'settings.easytokens_model_vision_native',
        'settings.easytokens_model_vision_local',
        'settings.session_expired',
    ]), JSON_UNESCAPED_SLASHES | JSON_UNESCAPED_UNICODE); ?>
};
</script>
<?php echo easychat_script_tag('js/views/setting.js'); ?>
<?php echo easychat_script_tag('js/views/setting_scheduler.js'); ?>
