import { getAdminUser } from "@/lib/auth";
import { prisma } from "@/lib/prisma";
import { NextResponse } from "next/server";

const serializeBigInt = (data: any) =>
  JSON.parse(
    JSON.stringify(data, (_, value) =>
      typeof value === "bigint" ? value.toString() : value
    )
  );

export async function GET(req: Request) {
  try {
    const { searchParams } = new URL(req.url);
    const pageIdParam = searchParams.get("page_id");
    const page_id = pageIdParam ? BigInt(pageIdParam) : BigInt(1);

    const data = await prisma.cms_moment_badges_section.findUnique({
      where: { page_id },
    });

    return NextResponse.json({
      success: true,
      data: serializeBigInt(data),
    });
  } catch (error: any) {
    console.error("Fetch moment badges section error:", error);
    return NextResponse.json(
      { success: false, message: error.message || "Failed to fetch data" },
      { status: 500 }
    );
  }
}

export async function POST(req: Request) {
  try {
    const admin = await getAdminUser();
    if (!admin) {
      return NextResponse.json(
        { success: false, message: "Unauthorized" },
        { status: 401 }
      );
    }

    const body = await req.json();
    const page_id = BigInt(body.page_id);

    if (!body.heading || !String(body.heading).trim()) {
      return NextResponse.json(
        { success: false, message: "Heading is required." },
        { status: 400 }
      );
    }

    const data = await prisma.cms_moment_badges_section.create({
      data: {
        page_id,
        heading: body.heading.trim(),
        status: body.status ?? true,
      },
    });

    return NextResponse.json({
      success: true,
      data: serializeBigInt(data),
    });
  } catch (error: any) {
    console.error("Create moment badges section error:", error);
    return NextResponse.json(
      { success: false, message: error.message || "Failed to create record" },
      { status: 500 }
    );
  }
}

export async function PUT(req: Request) {
  try {
    const admin = await getAdminUser();
    if (!admin) {
      return NextResponse.json(
        { success: false, message: "Unauthorized" },
        { status: 401 }
      );
    }

    const body = await req.json();

    if (!body.id) {
      return NextResponse.json(
        { success: false, message: "Missing id." },
        { status: 400 }
      );
    }

    if (!body.heading || !String(body.heading).trim()) {
      return NextResponse.json(
        { success: false, message: "Heading is required." },
        { status: 400 }
      );
    }

    const data = await prisma.cms_moment_badges_section.update({
      where: { id: BigInt(body.id) },
      data: {
        heading: body.heading.trim(),
        status: body.status ?? true,
        updated_at: new Date(),
      },
    });

    return NextResponse.json({
      success: true,
      data: serializeBigInt(data),
    });
  } catch (error: any) {
    console.error("Update moment badges section error:", error);
    return NextResponse.json(
      { success: false, message: error.message || "Failed to update record" },
      { status: 500 }
    );
  }
}