import prismadb from "@/lib/prismadb"
import { auth } from '@clerk/nextjs/server'
import { NextResponse } from "next/server"

export async function POST (
    req: Request,
    { params }: {params: {storeId: string}}
) {
    try {
        const {userId} = auth()
        const body = await req.json()

        const {
            name,
            price,
            priceDlr,
            categoryId,
            variantId,
            sizeId,
            quantity,
            itemCode,
            codeBars,
        } = body

        if (!userId) {
            return new NextResponse("Unauthenticated", {status: 401})
        }

        if (!name) {
            return new NextResponse("Name is required", {status: 400})
        }

        if (!price) {
            return new NextResponse("Price IDR is required", {status: 400})
        }

        if (!priceDlr) {
            return new NextResponse("Price Dolar is required", {status: 400})
        }

        if (!categoryId) {
            return new NextResponse("Category is required", {status: 400})
        }

        if (!variantId) {
            return new NextResponse("Variant is required", {status: 400})
        }

        if (!sizeId) {
            return new NextResponse("Size is required", {status: 400})
        }

        if (!quantity) {
            return new NextResponse("Quantity is required", {status: 400})
        }

        if (!itemCode) {
            return new NextResponse("Item Code is required", {status: 400})
        }

        if (!codeBars) {
            return new NextResponse("Code Bars is required", {status: 400})
        }

        if (!params.storeId) {
            return new NextResponse("Store id is required", {status: 400})
        }

        const storeByUserId = await prismadb.store.findFirst({
            where:{
                id: params.storeId,
                userId
            }
        })

        if (!storeByUserId) {
            return new NextResponse("Unauthorized", {status:403})
        }

        const item = await prismadb.items.create({
            data: {
                name,
                price,
                priceDlr,
                categoryId,
                variantId,
                sizeId,
                storeId: params.storeId,
                quantity,
                itemCode,
                codeBars,
                updatedAt: new Date()
            }
        })

        return NextResponse.json(item)
    } catch (error) {
        console.log('[ITEM_POST', error)
        return new NextResponse("Internal error", {status: 500})
    }
}

export async function GET (
    req: Request,
    { params }: {params: {storeId: string}}
) {
    try {
        const { searchParams } = new URL(req.url);
        const categoryId = searchParams.get("categoryId") || undefined;
        const variantId = searchParams.get("variantId") || undefined;
        const sizeId = searchParams.get("sizeId") || undefined;

        if (!params.storeId) {
            return new NextResponse("Store id is required", {status: 400}); 
        }

        const items = await prismadb.items.findMany({
            where : {
                storeId: params.storeId,
                categoryId,
                variantId,
                sizeId,
            },
            include :{
                category: true,
                size: true,
            },
            orderBy: {
                createdAt: 'desc'
            },
        })
        console.log('items', items);

        return NextResponse.json(items)
    } catch (error) {
        console.log('[ITEM_GET', error)
        return new NextResponse("Internal error", {status: 500})
    }
}
