// src/pages/api/search.json.ts
import type { APIRoute } from "astro";
import { pb } from '@lib/pocketbase';

export const GET: APIRoute = async ({ url }): Promise<Response> => {
  try {
    const query = url.searchParams.get('q')?.trim() || '';

    if (!query) {
      return new Response(JSON.stringify([]), {
        status: 200,
        headers: { "Content-Type": "application/json" },
      });
    }

    // 1. САНИТИЗАЦИЯ: Экранируем кавычки, чтобы запрос не сломал синтаксис фильтра PB
    // Если пользователь введет: React "Hero", мы превратим это в: React \"Hero\"
    const safeQuery = query.replace(/"/g, '\\"');

    // 2. СБОРКА ФИЛЬТРА: Собираем строку вручную (это самый надежный способ)
    // Мы ищем совпадения в заголовке, описании ИЛИ контенте
    const filterString = `isActive = true && (title ~ "${safeQuery}" || description ~ "${safeQuery}" || content ~ "${safeQuery}")`;

    const result = await pb.collection('posts').getList(1, 15, {
      filter: filterString,
      sort: '-publishDate',
      // Запрашиваем только нужные поля (без content, чтобы не грузить сеть)
      fields: 'id,title,description,slug',
    });

    const searchData = result.items.map((post) => ({
      id: post.id,
      title: post.title,
      description: post.description,
      slug: post.slug,
    }));

    return new Response(JSON.stringify(searchData), {
      status: 200,
      headers: {
        "Content-Type": "application/json",
        "Cache-Control": "public, max-age=60"
      },
    });

  } catch (error) {
    // Логируем ошибку подробно, чтобы видеть причину в консоли
    console.error('Search API error:', error);

    return new Response(JSON.stringify({ error: 'Internal server error' }), {
      status: 500,
      headers: { 'Content-Type': 'application/json' },
    });
  }
};