import { PrismaClient } from "@prisma/client";

const prisma = new PrismaClient();

export default defineEventHandler( async (event) => {
    console.log("This is a test for a patch request.");

    const body = await readBody(event);

    /*
    This is a sample of the expected body data structure:
    {
        function: "", ["rename", "move"] // Required to determine patch functionality.
        cabinet_id: "", // REQUIRED to identify the folder to be patched.
        new_name: "", // REQUIRED to rename the folder.
        new_parent_id: "", // REQUIRED to move the folder to a new parent.
    }

    */

    // Function to check for body data.
    if (!body.cabinet_id) {
        return {
            status: 400,
            message: "Folder or cabinet_id is required",
        }
    } else {

        const folder = await prisma.cabinets.findUnique({
            where: {
                cb_id: body.cabinet_id,
            }
        });

        if (!folder) {
            return {
                status: 404,
                message: "The requested folder was not found",
            }
        }
    }

    switch (body.function) {
        case "rename":
            if (!body.new_name) {
                return {
                    status: 400,
                    message: "new_name was not provided. The folder was not renamed.",
                }
            }
            const renameFolder = await prisma.cabinets.update({
                where: {
                    cb_id: body.cabinet_id,
                },
                data: {
                    cb_name: body.new_name,
                }
            })

            return {
                status: 200,
                message: "Folder renamed successfully",
                folder: renameFolder,
            }
        
        case "move":
            if (!body.new_parent_id || body.new_parent_id === null){
                return
            }
            const moveFolder = await prisma.cabinets.update({
                where: {
                    cb_id: body.cabinet_id,
                },
                data: {
                    cb_parent_id: body.new_parent_id,
                }
            })

            return {
                status: 200,
                message: "Folder moved successfully",
                folder: moveFolder,
            }
        
        default:
            return {
                status: 400,
                message: "Invalid function",
            }
    }
})