import { revalidatePath } from "next/cache";
import { getSessionUser } from "@/lib/auth";
import {
  createMarketingBlogPost,
  type MarketingBlogPostInput,
} from "@/lib/marketing-blog";
import { isKavenixAdminEmail } from "@/lib/kavenix-admin";

export const runtime = "nodejs";
export const dynamic = "force-dynamic";

function errorMessage(error: unknown) {
  const code = error instanceof Error ? error.message : "blog-post-save-failed";

  if (code === "invalid-blog-slug") {
    return "URL 슬러그는 영문 소문자, 숫자, 하이픈(-)만 사용해 3자 이상 입력해 주세요.";
  }

  if (code.startsWith("invalid-blog-")) {
    return "제목, 요약, SEO 설명, 본문 입력값을 다시 확인해 주세요.";
  }

  if (code.includes("ER_DUP_ENTRY")) {
    return "이미 사용 중인 URL 슬러그입니다.";
  }

  return "블로그 글 저장 중 오류가 발생했습니다.";
}

export async function POST(request: Request) {
  const user = await getSessionUser();

  if (!user || !isKavenixAdminEmail(user.email)) {
    return Response.json({ error: "forbidden", message: "최고관리자만 블로그 글을 작성할 수 있습니다." }, { status: 403 });
  }

  const payload = await request.json().catch(() => null) as MarketingBlogPostInput | null;

  if (!payload) {
    return Response.json({ error: "invalid-json", message: "작성 내용을 다시 확인해 주세요." }, { status: 400 });
  }

  try {
    const post = await createMarketingBlogPost(payload, user.email);

    if (!post) {
      throw new Error("blog-post-save-failed");
    }

    revalidatePath("/blog");
    revalidatePath(`/blog/${post.slug}`);
    revalidatePath("/sitemap.xml");

    return Response.json({ ok: true, post, message: post.status === "published" ? "블로그 글을 발행했습니다." : "임시저장했습니다." });
  } catch (error) {
    return Response.json(
      { error: "blog-post-save-failed", message: errorMessage(error) },
      { status: 400 },
    );
  }
}
