import { NextResponse } from "next/server";

import { isAdminAuthorized } from "@/lib/admin/adminAuth";
import { deletePost, getPost, upsertPost } from "@/lib/admin/blogDb";

export const runtime = "nodejs";

export async function GET(req: Request) {
  if (!isAdminAuthorized(req)) {
    return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
  }

  const url = new URL(req.url);
  const slug = (url.searchParams.get("slug") || "").trim();
  if (!slug) return NextResponse.json({ error: "Missing slug" }, { status: 400 });

  const post = await getPost(slug);
  if (!post) return NextResponse.json({ error: "Not found" }, { status: 404 });
  return NextResponse.json({ post });
}

export async function POST(req: Request) {
  if (!isAdminAuthorized(req)) {
    return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
  }

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

  try {
    const { slug } = await upsertPost({
      slug: String(payload.slug || ""),
      title: String(payload.title || ""),
      date: String(payload.date || ""),
      excerpt: String(payload.excerpt || ""),
      coverImage: payload.coverImage ? String(payload.coverImage) : undefined,
      tags: payload.tags ? String(payload.tags) : undefined,
      content: String(payload.content || ""),
    });
    return NextResponse.json({ ok: true, slug });
  } catch (err: any) {
    return NextResponse.json({ error: err?.message || "Unable to save post." }, { status: 400 });
  }
}

export async function DELETE(req: Request) {
  if (!isAdminAuthorized(req)) {
    return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
  }

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

  const slug = String(payload?.slug || "").trim();
  if (!slug) return NextResponse.json({ error: "Missing slug" }, { status: 400 });

  try {
    await deletePost(slug);
    return NextResponse.json({ ok: true });
  } catch (err: any) {
    return NextResponse.json({ error: err?.message || "Unable to delete post." }, { status: 400 });
  }
}
