<?php
declare(strict_types=1);
require_once __DIR__ . '/bootstrap.php';
admin_require_login();

$settings = cms_settings();
$telegram = array_merge([
    'client_message_enabled' => true,
    'client_message_title' => booking_client_message_default_title(),
    'client_message_template' => booking_client_message_default_template(),
], (array)($settings['telegram_notifications'] ?? []));
$notice = '';

if (request_method() === 'POST') {
    if (!verify_csrf($_POST['csrf_token'] ?? null)) {
        $notice = '<div class="notice notice--error">Ошибка безопасности. Обновите страницу и повторите сохранение.</div>';
    } else {
        $enabled = !empty($_POST['client_message_enabled']);
        $title = post_text('client_message_title', booking_client_message_default_title());
        $templateRaw = $_POST['client_message_template'] ?? '';
        $template = is_string($templateRaw) ? trim(str_replace(["\r\n", "\r"], "\n", $templateRaw)) : '';

        if ($enabled && $template === '') {
            $notice = '<div class="notice notice--error">Шаблон не может быть пустым, пока добавление текста включено.</div>';
        } elseif ((function_exists('mb_strlen') ? mb_strlen($template, 'UTF-8') : strlen($template)) > 20000) {
            $notice = '<div class="notice notice--error">Шаблон слишком большой. Максимум — 20 000 символов.</div>';
        } else {
            $telegram['client_message_enabled'] = $enabled;
            $telegram['client_message_title'] = $title !== '' ? $title : booking_client_message_default_title();
            $telegram['client_message_template'] = $template;
            $settings['telegram_notifications'] = array_merge(
                (array)($settings['telegram_notifications'] ?? []),
                $telegram
            );
            if (cms_save_settings($settings)) {
                $notice = '<div class="notice">Шаблон Telegram сохранён.</div>';
            } else {
                $notice = '<div class="notice notice--error">Не удалось сохранить настройки.</div>';
            }
        }
    }
}

$placeholders = [
    '{name}' => 'имя гостя',
    '{house}' => 'выбранный домик',
    '{checkin_ru}' => 'дата заезда в формате дд.мм.гггг',
    '{checkout_ru}' => 'дата выезда в формате дд.мм.гггг',
    '{dates_ru}' => 'обе даты одной строкой',
    '{phone}' => 'номер телефона',
    '{contact}' => 'контакт в мессенджере',
    '{adults}' => 'количество взрослых',
    '{children}' => 'дети и возраст',
    '{pet}' => 'проживание с питомцем',
    '{comment}' => 'комментарий гостя',
    '{rate}' => 'выбранный тариф',
    '{total}' => 'ориентировочная сумма',
    '{brand}' => 'название комплекса',
    '{checkin}' => 'дата заезда в системном формате',
    '{checkout}' => 'дата выезда в системном формате',
];

ob_start();
echo $notice;
?>
<form class="grid" method="post" id="telegram-client-message-form">
  <input type="hidden" name="csrf_token" value="<?= e(csrf_token()) ?>">

  <section class="panel grid">
    <div class="admin-page-head admin-page-head--compact">
      <div>
        <div class="badge">Telegram-заявки</div>
        <h2 style="margin:10px 0 6px">Готовый текст для клиента</h2>
        <p class="muted" style="margin:0">Этот текст автоматически формируется по заявке и добавляется в Telegram под всей информацией о заказе.</p>
      </div>
      <a class="button button--ghost" href="/admin/settings.php">Bot token и Chat ID</a>
    </div>

    <label class="pill"><input type="checkbox" name="client_message_enabled" id="client-message-enabled" <?= !empty($telegram['client_message_enabled']) ? 'checked' : '' ?>> добавлять готовый текст в каждую заявку Telegram</label>

    <label>
      <span>Заголовок над готовым текстом</span>
      <input name="client_message_title" id="client-message-title" maxlength="200" value="<?= e((string)$telegram['client_message_title']) ?>">
    </label>

    <label>
      <span>Шаблон сообщения</span>
      <textarea name="client_message_template" id="client-message-template" spellcheck="true" style="min-height:620px;line-height:1.55;font-family:inherit"><?= e((string)$telegram['client_message_template']) ?></textarea>
    </label>
    <div class="notice" style="margin:0">Переносы строк и абзацы сохраняются. Переменные заменяются фактическими данными из формы непосредственно перед отправкой заявки.</div>
  </section>

  <section class="panel grid">
    <div class="badge">Переменные заявки</div>
    <div style="display:flex;flex-wrap:wrap;gap:8px">
      <?php foreach ($placeholders as $placeholder => $description): ?>
        <button class="button button--ghost js-insert-placeholder" type="button" data-placeholder="<?= e($placeholder) ?>" title="<?= e($description) ?>" style="padding:8px 11px"><code><?= e($placeholder) ?></code></button>
      <?php endforeach; ?>
    </div>
    <div class="grid grid-2">
      <?php foreach ($placeholders as $placeholder => $description): ?>
        <div class="card" style="padding:10px 12px"><code><?= e($placeholder) ?></code><div class="muted" style="margin-top:5px"><?= e($description) ?></div></div>
      <?php endforeach; ?>
    </div>
  </section>

  <section class="panel grid">
    <div class="admin-page-head admin-page-head--compact">
      <div>
        <div class="badge">Предпросмотр</div>
        <h2 style="margin:10px 0 6px">Как текст будет выглядеть</h2>
      </div>
      <button class="button button--ghost" type="button" id="restore-default-template">Восстановить пример</button>
    </div>
    <pre id="client-message-preview" style="white-space:pre-wrap;word-break:break-word;margin:0;padding:18px;border:1px solid var(--line);border-radius:16px;background:#fff;min-height:220px;font:inherit;line-height:1.55"></pre>
  </section>

  <div class="panel sticky-actions">
    <button class="button" type="submit">Сохранить текст Telegram</button>
  </div>
</form>

<script>
(function () {
  const template = document.getElementById('client-message-template');
  const title = document.getElementById('client-message-title');
  const enabled = document.getElementById('client-message-enabled');
  const preview = document.getElementById('client-message-preview');
  const defaultTemplate = <?= json_encode(booking_client_message_default_template(), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) ?>;
  const defaultTitle = <?= json_encode(booking_client_message_default_title(), JSON_UNESCAPED_UNICODE | JSON_UNESCAPED_SLASHES) ?>;
  const sample = {
    name: 'Анна',
    house: 'AURA Family',
    checkin_ru: '25.07.2026',
    checkout_ru: '28.07.2026',
    dates_ru: '25.07.2026 — 28.07.2026',
    phone: '+7 999 123-45-67',
    contact: '@anna',
    adults: '2',
    children: '1 ребёнок, 7 лет',
    pet: 'Нет',
    comment: 'Хотим баню вечером',
    rate: 'Основной тариф',
    total: '29 000 ₽',
    brand: 'FEYAFRAME',
    checkin: '2026-07-25',
    checkout: '2026-07-28'
  };

  function renderPreview() {
    if (!enabled.checked) {
      preview.textContent = 'Добавление готового текста в Telegram отключено.';
      return;
    }
    let value = template.value;
    value = value.replace(/\{(\w+)\}/g, function (_, key) {
      return Object.prototype.hasOwnProperty.call(sample, key) ? sample[key] : '';
    });
    preview.textContent = (title.value.trim() ? title.value.trim() + '\n\n' : '') + value.trim();
  }

  document.querySelectorAll('.js-insert-placeholder').forEach(function (button) {
    button.addEventListener('click', function () {
      const token = button.getAttribute('data-placeholder') || '';
      const start = template.selectionStart || 0;
      const end = template.selectionEnd || 0;
      template.setRangeText(token, start, end, 'end');
      template.focus();
      renderPreview();
    });
  });

  document.getElementById('restore-default-template').addEventListener('click', function () {
    if (!window.confirm('Восстановить текст из первоначального примера? Несохранённые изменения будут заменены.')) return;
    template.value = defaultTemplate;
    title.value = defaultTitle;
    enabled.checked = true;
    renderPreview();
  });

  template.addEventListener('input', renderPreview);
  title.addEventListener('input', renderPreview);
  enabled.addEventListener('change', renderPreview);
  renderPreview();
})();
</script>
<?php
admin_layout('Текст Telegram для клиента', ob_get_clean(), 'telegram_message');
