import { NextRequest, NextResponse } from "next/server";
import { authOptions } from "@/app/api/auth/[...nextauth]/auth-options";
import { getServerSession } from "next-auth";
import { db } from "@/lib/db";
import { getLogger } from "@/utils/logger";


const logger = getLogger("/api/admin/footerSection/[id]");


export const DELETE = async (req: NextRequest, { params }: { params: { id: string } }) => {
    try {
        const session = await getServerSession(authOptions);
        if (!session || session.user.role !== "ADMIN") {
            logger.warn("Forbidden", { userRole: session?.user.role });
            return new NextResponse("Forbidden", { status: 403 });
        }

        await db.footerSection.delete({
            where: { id: parseInt(params.id) },
        });

        logger.info("Footer Section deleted successfully ", { FooterSectionID: params.id });

        return new NextResponse("Footer Section deleted", { status: 200 });


    } catch (error: any) {
        logger.error("Error deleting Footer Section", { errorMsg: error.message, errorData: error.config?.data });
        return new NextResponse("Internal server Error", { status: 500 });
    }
}


export const GET = async (req: NextRequest, { params }: { params: { id: string } }) => {
    try {
        const session = await getServerSession(authOptions);
        if (!session || session.user.role !== "ADMIN") {
            logger.warn("Forbidden", { status: 403, session: session, userRole: session?.user.role });
            return new NextResponse("Forbidden", { status: 403 });
        }

        const footerSection = await db.footerSection.findUnique({
            where: { id: parseInt(params.id) },
        });

        return NextResponse.json(footerSection, { status: 200 });

    } catch (error: any) {
        logger.error("Error fetching Footer Section details", { errorMsg: error.message });
        return new NextResponse("Internal server Error", { status: 500 });
    }
}


export const PUT = async (req: NextRequest, { params }: { params: { id: string } }) => {
    try {
        const session = await getServerSession(authOptions);
        if (!session || session.user.role !== "ADMIN") {
            logger.warn("Forbidden", { status: 403, session: session, userRole: session?.user.role });
            return new NextResponse("Forbidden", { status: 403 });
        }

        const data = await req.formData();

        const title = data.get("title");
        const description = data.get("description");

        const footerSection = await db.footerSection.update({
            where: {
                id: parseInt(params.id)
            },
            data: {
                title: title?.toString() || "",
                description: description?.toString() || "",
            }
        })

        return NextResponse.json({ footerSection }, { status: 200 });

    } catch (error: any) {
        logger.error("Error updating Footer Section", { errorMsg: error.message, errorData: error.config?.data });
        return new NextResponse("Internal server Error", { status: 500 });
    }
}

