import { NextResponse } from "next/server";
import { PrismaClient } from "@/generated/prisma/client";

const prisma = new PrismaClient();

export async function GET(_request: Request) {
  try {
    const projects = await prisma.project.findMany({
      orderBy: { createdAt: "desc" },
      take: 50,
      select: {
        id: true,
        title: true,
        slug: true,
        status: true,
        createdAt: true,
        updatedAt: true,
      },
    });

    return NextResponse.json(projects, { status: 200 });
  } catch (error: any) {
    return NextResponse.json(
      { message: "프로젝트 목록을 가져오는 중 오류가 발생했습니다.", error: error?.message },
      { status: 500 },
    );
  }
}

export async function POST(request: Request) {
  const body = await request.json();
  const { title, slug, contentJson } = body;

  if (!title || !slug || typeof title !== "string" || typeof slug !== "string") {
    return NextResponse.json({ message: "title과 slug는 필수입니다." }, { status: 400 });
  }

  try {
    const project = await prisma.project.upsert({
      where: { slug },
      update: {
        title,
        contentJson,
      },
      create: {
        title,
        slug,
        contentJson,
      },
    });

    return NextResponse.json(project, { status: 201 });
  } catch (error: any) {
    return NextResponse.json(
      { message: "프로젝트 생성 중 오류가 발생했습니다.", error: error?.message },
      { status: 500 },
    );
  }
}
