import { NextRequest, NextResponse } from 'next/server';
import { resolveStoreIdentifier } from '@/lib/storeHost';

const MIN_LENGTH = 3;

export async function GET(request: NextRequest) {
  const q = request.nextUrl.searchParams.get('q') ?? '';
  const requestedLimit = Number(request.nextUrl.searchParams.get('limit') ?? '8');
  const requestedPage = Number(request.nextUrl.searchParams.get('page') ?? '1');
  const limit = Math.min(Math.max(Number.isFinite(requestedLimit) ? Math.floor(requestedLimit) : 8, 1), 500);
  const page = Math.max(Number.isFinite(requestedPage) ? Math.floor(requestedPage) : 1, 1);

  if (q.trim().length < MIN_LENGTH) {
    return NextResponse.json({ results: [] });
  }

  const backendUrl = process.env.BACKEND_URL;
  const appToken = process.env.STORE_APP_TOKEN;

  if (!backendUrl || !appToken) {
    console.error('[store/search] Faltan variables de entorno: BACKEND_URL o STORE_APP_TOKEN');
    return NextResponse.json({ results: [] });
  }

  const host = request.headers.get('host') ?? '';
  const subdominio = resolveStoreIdentifier(host) ?? process.env.STORE_SUBDOMINIO_DEV;

  if (!subdominio) {
    console.error(`[store/search] No se pudo determinar el subdominio (host: ${host}). Configurá STORE_SUBDOMINIO_DEV para desarrollo local.`);
    return NextResponse.json({ results: [] });
  }

  const url = `${backendUrl}/api/v1/store/productos/search?q=${encodeURIComponent(q)}&subdominio=${encodeURIComponent(subdominio)}&limit=${limit}&page=${page}`;

  try {
    const res = await fetch(url, {
      headers: { 'x-app-key': appToken },
      signal: AbortSignal.timeout(8000),
    });

    if (!res.ok) {
      console.error(`[store/search] Backend respondió ${res.status}`);
      return NextResponse.json({ results: [] });
    }

    const data = (await res.json()) as { results: unknown[]; alternatives?: unknown[] };
    return NextResponse.json(data);
  } catch (err) {
    console.error('[store/search] Error al llamar al backend:', err);
    return NextResponse.json({ results: [] });
  }
}
