import { NextResponse } from "next/server";
import { z } from "zod";
import { prisma } from "@/lib/prisma";
import { requireAdmin, unauthorized } from "@/lib/admin-api";
import { BASE_CATEGORY_VALUES } from "@/lib/base-category";

const categorySchema = z.enum(BASE_CATEGORY_VALUES);

export async function GET(req: Request) {
  const admin = await requireAdmin();
  if (!admin) return unauthorized();

  const url = new URL(req.url);
  const category = categorySchema.parse((url.searchParams.get("category") || "").toUpperCase());
  const item = await prisma.baseContent.findUnique({ where: { category } });
  return NextResponse.json(item);
}

const saveSchema = z.object({
  category: z.enum(BASE_CATEGORY_VALUES),
  title: z.string().min(1),
  description: z.string().optional(),
  imageUrl: z.string().optional(),
});

export async function POST(req: Request) {
  const admin = await requireAdmin();
  if (!admin) return unauthorized();
  const body = saveSchema.parse(await req.json());
  const item = await prisma.baseContent.upsert({
    where: { category: body.category },
    create: {
      category: body.category,
      title: body.title,
      description: body.description?.trim() || null,
      imageUrl: body.imageUrl?.trim() || null,
    },
    update: {
      title: body.title,
      description: body.description?.trim() || null,
      imageUrl: body.imageUrl?.trim() || null,
    },
  });
  return NextResponse.json(item);
}

