import { NextRequest, NextResponse } from "next/server";
import { prisma } from "prisma/client";
import { Credential } from "@/common/types/auth"

export async function GET(request: NextRequest) {
  const PAGE_SIZE = 30;

  const searchParams = request.nextUrl.searchParams;
  const type = searchParams.get('type')
  const search = searchParams.get('search');
  const page = searchParams.get('page');
  const intPage: number = page ? parseInt(page) : 1;

  const credentialStr = request.cookies.get('credential')?.value
  const credential: Credential | null = credentialStr ? JSON.parse(credentialStr) : null

  if (!credential) {
    return NextResponse.json({ error: 'Unauthorized' }, { status: 401 })
  }

  const { companyId } = credential

  const where = {
    AND: {
      OR: [
        { name: { contains: search ?? '' } },
        { barcode: { contains: search ?? '' } },
        { itemCode: { contains: search ?? '' } },
      ],
      companyId: type == 'all' ? undefined : companyId
    }
  }

  const products = await prisma.product.findMany({
    where,
    include: { company: true },
    take: PAGE_SIZE,
    skip: (intPage - 1) * PAGE_SIZE
  })

  const count = await prisma.product.count({ where })
  const pagination = {
    page: intPage,
    totalPage: Math.ceil(count / PAGE_SIZE),
  }

  return NextResponse.json({ products, ...pagination })
}