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

function lines_to_array($value): array {
    if (is_array($value)) return array_values(array_filter(array_map(static fn($v)=>trim((string)$v), $value)));
    $parts = preg_split('/\r\n|\r|\n/', (string)$value) ?: [];
    return array_values(array_filter(array_map('trim', $parts)));
}

$collection = cms_collection('houses');
$items = is_array($collection['items'] ?? null) ? $collection['items'] : [];
if (!$items) $items = [[]];
$notice = '';

if (request_method() === 'POST') {
    if (!verify_csrf($_POST['csrf_token'] ?? null)) {
        $notice = '<div class="notice notice--error">Ошибка безопасности.</div>';
    } else {
        $incoming = post_array('items');
        $result = [];
        foreach ($incoming as $i => $item) {
            if (!is_array($item)) continue;
            $title = trim((string)($item['title'] ?? ''));
            if ($title === '') continue;
            $gallery = post_array('gallery_sort_' . $i);
            if (!$gallery) $gallery = lines_to_array($item['gallery'] ?? '');
            $image = trim((string)($item['image'] ?? ''));
            if (!empty($_FILES['house_main_upload']['name'][$i])) {
                $file = [
                    'name' => $_FILES['house_main_upload']['name'][$i],
                    'type' => $_FILES['house_main_upload']['type'][$i] ?? '',
                    'tmp_name' => $_FILES['house_main_upload']['tmp_name'][$i] ?? '',
                    'error' => $_FILES['house_main_upload']['error'][$i] ?? UPLOAD_ERR_NO_FILE,
                    'size' => $_FILES['house_main_upload']['size'][$i] ?? 0,
                ];
                $uploaded = admin_upload_image_file($file, 'houses');
                if ($uploaded) {
                    $image = $uploaded;
                    array_unshift($gallery, $uploaded);
                }
            }
            $gallery = array_merge($gallery, admin_upload_multiple('house_gallery_upload_' . $i, 'houses'));
            if (!empty($item['remove_gallery']) && is_array($item['remove_gallery'])) {
                $removeSet = array_map('strval', $item['remove_gallery']);
                $gallery = array_values(array_filter($gallery, static fn($src) => !in_array((string)$src, $removeSet, true)));
                if (in_array($image, $removeSet, true)) $image = '';
            }
            $primary = trim((string)($item['primary_gallery'] ?? ''));
            $gallery = array_values(array_unique(array_filter(array_map('trim', $gallery))));
            if ($primary !== '' && in_array($primary, $gallery, true)) {
                $image = $primary;
                $gallery = array_values(array_unique(array_merge([$primary], $gallery)));
            }
            if ($image === '' && !empty($gallery[0])) $image = $gallery[0];
            if ($image !== '' && !in_array($image, $gallery, true)) array_unshift($gallery, $image);
            $result[] = [
                'title' => $title,
                'meta' => trim((string)($item['meta'] ?? '')),
                'price' => trim((string)($item['price'] ?? '')),
                'description' => trim((string)($item['description'] ?? '')),
                'full_description' => trim((string)($item['full_description'] ?? '')),
                'image' => $image,
                'gallery' => $gallery,
                'features' => lines_to_array($item['features'] ?? []),
                'inside_text' => trim((string)($item['inside_text'] ?? '')),
                'territory_text' => trim((string)($item['territory_text'] ?? '')),
                'booking_note' => trim((string)($item['booking_note'] ?? '')),
                'checkin_time' => trim((string)($item['checkin_time'] ?? '')),
                'checkout_time' => trim((string)($item['checkout_time'] ?? '')),
                'capacity' => trim((string)($item['capacity'] ?? '')),
                'area' => trim((string)($item['area'] ?? '')),
                'view' => trim((string)($item['view'] ?? '')),
            ];
        }
        cms_save_collection('houses', ['items' => $result]);
        $items = $result ?: [[]];
        $notice = '<div class="notice">Домики сохранены.</div>';
    }
}

ob_start();
echo $notice;
?>
<div class="panel admin-page-head">
  <div>
    <div class="badge">Профи-режим</div>
    <h2 style="margin:10px 0 6px">Менеджер домиков и галерей</h2>
    <p class="muted">Редактируйте карточки домиков, назначайте главное фото, загружайте серии изображений и меняйте их порядок прямо в админке.</p>
  </div>
  <div class="module-actions">
    <a class="button button--ghost" href="/admin/header.php">Шапка сайта</a>
    <a class="button button--ghost" href="/admin/availability.php">Календарь</a>
  </div>
</div>
<form method="post" enctype="multipart/form-data" class="grid" data-collection-form data-collection-name="houses">
  <input type="hidden" name="csrf_token" value="<?= e(csrf_token()) ?>">
  <div class="panel sticky-actions">
    <div class="module-actions">
      <button class="button button--ghost" type="button" data-add-item>Добавить домик</button>
      <button class="button" type="submit">Сохранить домики</button>
    </div>
  </div>
  <?php foreach ($items as $i => $item): $gallery = array_values(array_filter($item['gallery'] ?? [])); ?>
    <section class="collection-item house-editor" data-repeatable-item data-item-type="houses">
      <div class="collection-item__head">
        <div>
          <strong data-item-title><?= e($item['title'] ?? 'Новый домик') ?></strong>
          <div class="muted">Карточка домика, преимущества, описание и медиа.</div>
        </div>
        <button class="button button--ghost button--small" type="button" data-remove-item>Удалить</button>
      </div>
      <div class="grid grid-3">
        <label><span>Название</span><input data-title-source name="items[<?= $i ?>][title]" value="<?= e($item['title'] ?? '') ?>"></label>
        <label><span>Цена от</span><input name="items[<?= $i ?>][price]" value="<?= e($item['price'] ?? '') ?>"></label>
        <label><span>Краткий подзаголовок</span><input name="items[<?= $i ?>][meta]" value="<?= e($item['meta'] ?? '') ?>"></label>
      </div>
      <div class="grid grid-3">
        <label><span>Вместимость</span><input name="items[<?= $i ?>][capacity]" value="<?= e($item['capacity'] ?? '') ?>"></label>
        <label><span>Площадь / формат</span><input name="items[<?= $i ?>][area]" value="<?= e($item['area'] ?? '') ?>"></label>
        <label><span>Подходит для</span><input name="items[<?= $i ?>][view]" value="<?= e($item['view'] ?? '') ?>"></label>
      </div>
      <div class="grid grid-2">
        <label><span>Краткое описание</span><textarea name="items[<?= $i ?>][description]"><?= e($item['description'] ?? '') ?></textarea></label>
        <label><span>Подробно о домике</span><textarea name="items[<?= $i ?>][full_description]"><?= e($item['full_description'] ?? '') ?></textarea></label>
      </div>
      <div class="grid grid-2">
        <label><span>Время заезда</span><input name="items[<?= $i ?>][checkin_time]" value="<?= e($item['checkin_time'] ?? '') ?>" placeholder="Например: с 16:00"></label>
        <label><span>Время выезда</span><input name="items[<?= $i ?>][checkout_time]" value="<?= e($item['checkout_time'] ?? '') ?>" placeholder="Например: до 12:00"></label>
      </div>
      <div class="grid grid-2">
        <label><span>Что есть в домике</span><textarea name="items[<?= $i ?>][inside_text]" placeholder="Кратко и удобно: спальня, кухня, чан, камин, телевизор..."><?= e($item['inside_text'] ?? '') ?></textarea></label>
        <label><span>Что есть на территории</span><textarea name="items[<?= $i ?>][territory_text]" placeholder="Мангал, парковка, баня, купель, детская зона..."><?= e($item['territory_text'] ?? '') ?></textarea></label>
      </div>
      <label><span>Подсказка в окне бронирования</span><textarea name="items[<?= $i ?>][booking_note]" placeholder="Короткий текст, который будет виден в окне бронирования для этого домика"><?= e($item['booking_note'] ?? '') ?></textarea></label>
      <div class="grid grid-2">
        <label><span>Главное фото (URL)</span><input name="items[<?= $i ?>][image]" value="<?= e($item['image'] ?? '') ?>"></label>
        <label><span>Загрузить главное фото</span><input type="file" name="house_main_upload[<?= $i ?>]" accept=".jpg,.jpeg,.png,.webp,.gif"></label>
      </div>
      <label><span>Преимущества домика — по одному на строку</span><textarea name="items[<?= $i ?>][features]"><?= e(implode("\n", $item['features'] ?? [])) ?></textarea></label>
      <div class="house-media-manager house-media-manager--pro">
        <div>
          <div class="muted" style="margin-bottom:8px">Текущая галерея. Можно выбрать главное фото и удалить ненужные.</div>
          <div class="admin-media-grid admin-media-grid--houses admin-media-grid--sortable" data-sortable-gallery>
            <?php foreach ($gallery as $gIndex => $src): ?>
              <div class="admin-media-card admin-media-card--editable" data-sort-item draggable="true">
                <img src="<?= e($src) ?>" alt="">
                <div class="admin-media-card__caption"><?= e(basename((string)$src)) ?></div>
                <input type="hidden" name="gallery_sort_<?= $i ?>[]" value="<?= e($src) ?>">
                <label class="pill"><input type="radio" name="items[<?= $i ?>][primary_gallery]" value="<?= e($src) ?>" <?= (($item['image'] ?? '') === $src || ($gIndex === 0 && empty($item['image']))) ? 'checked' : '' ?>> главное</label>
                <label class="pill danger"><input type="checkbox" name="items[<?= $i ?>][remove_gallery][]" value="<?= e($src) ?>"> удалить</label>
              </div>
            <?php endforeach; ?>
            <?php if (!$gallery): ?><div class="muted">Фото пока не добавлены.</div><?php endif; ?>
          </div>
        </div>
        <div class="grid">
          <label><span>Добавить фото в галерею</span><input type="file" name="house_gallery_upload_<?= $i ?>[]" multiple accept=".jpg,.jpeg,.png,.webp,.gif"></label>
          <label><span>Или вставить URL фото — по одному на строку</span><textarea name="items[<?= $i ?>][gallery]"><?= e(implode("\n", $gallery)) ?></textarea></label>
        </div>
      </div>
    </section>
  <?php endforeach; ?>
</form>
<?php
admin_layout('Менеджер домиков', ob_get_clean(), 'houses');
