import db from "@/lib/db";
import { NextResponse } from "next/server";

import { getLogger } from "@/utils/logger";
const logger = getLogger("/api/search")

export const dynamic = "force-dynamic";


export const GET = async (req: Request) => {

    try {
        const { searchParams } = new URL(req.url);
        const q = searchParams.get("q")?.trim();
        const page = parseInt(searchParams.get("page") || "1");
        const limit = parseInt(searchParams.get("limit") || "10");
        

        if (!q) return NextResponse.json({ error: "Query parameter 'q' is required" }, { status: 400 });

        const results = await db.productVariant.findMany({
            where: {
                name: { contains: q, mode: "insensitive" },
            },
            include: { variant_images: true },
            skip: (page - 1) * limit,
            take: limit,
        })

        const totalCount = await db.productVariant.count({
            where: {
                name: { contains: q, mode: "insensitive" },
            },
        })

        return NextResponse.json({results: results, totalCount: totalCount, page: page, limit: limit}, { status: 200 });
    }
    catch (error: any) {
        logger.error("Failed to search an item", {
            error: error?.config?.data ?? error?.message ?? "Unknown error"
        })
        return new Response("Internal Server Error", { status: 500 });
    }
}
