import { NextResponse } from "next/server";

import {
  createAdminSessionValue,
  getAdminSessionCookieName,
  getAdminSessionCookieOptions,
} from "@/lib/admin/adminAuth";
import { createInitialAdminUser, countAdminUsers, normalizeAdminId } from "@/lib/admin/adminUsersDb";

export const runtime = "nodejs";

export async function POST(req: Request) {
  const users = await countAdminUsers();
  if (users > 0) {
    return NextResponse.json({ error: "Admin is already configured." }, { status: 409 });
  }

  let payload: any;
  try {
    payload = await req.json();
  } catch {
    return NextResponse.json({ error: "Invalid payload." }, { status: 400 });
  }

  let id = "";
  try {
    id = normalizeAdminId(String(payload?.id || ""));
  } catch (err: any) {
    return NextResponse.json({ error: err?.message || "Invalid admin id." }, { status: 400 });
  }
  const password = String(payload?.password || "");
  if (!password) {
    return NextResponse.json({ error: "Missing password." }, { status: 400 });
  }

  try {
    await createInitialAdminUser({ id, password });
  } catch (err: any) {
    return NextResponse.json({ error: err?.message || "Unable to create admin user." }, { status: 400 });
  }

  const value = createAdminSessionValue(id);
  const res = NextResponse.json({ ok: true, authenticated: true, id });
  res.cookies.set(getAdminSessionCookieName(), value, getAdminSessionCookieOptions());
  return res;
}

