import { NextRequest, NextResponse } from "next/server"; import { z } from "zod"; import { tmdbFetch, filterAdultMovies } from "@/lib/tmdb/client"; import type { TMDBSearchResponse } from "@/types/tmdb"; const searchParamsSchema = z.object({ query: z.string().min(1).max(200), page: z.coerce.number().int().min(1).max(500).optional().default(1), }); export async function GET(request: NextRequest) { const rawParams = Object.fromEntries(request.nextUrl.searchParams); const parsed = searchParamsSchema.safeParse(rawParams); if (!parsed.success) { return NextResponse.json( { error: "Invalid parameters", details: parsed.error.flatten().fieldErrors }, { status: 400 }, ); } const { query, page } = parsed.data; try { const data = await tmdbFetch("/search/movie", { query, page: String(page), }); return NextResponse.json(filterAdultMovies(data), { headers: { "Cache-Control": "public, s-maxage=300, stale-while-revalidate=60" }, }); } catch (error) { console.error("TMDB search error:", error); return NextResponse.json({ error: "Failed to search movies" }, { status: 500 }); } }