import { NextResponse } from "next/server";
import type { Block, ProjectConfig } from "@/features/editor/state/editorStore";
import { buildStaticHtml } from "@/app/api/export/route";

// /api/export/preview 라우트는 Export 결과 HTML 을 ZIP 없이 바로 반환하는
// 경량 프리뷰용 엔드포인트이다. 에디터에서 Export 미리보기 UX 를 제공하기 위해 사용한다.

type PreviewRequestBody = {
  blocks: Block[];
  projectConfig?: ProjectConfig;
};

export async function POST(request: Request) {
  let body: PreviewRequestBody;

  try {
    // JSON 본문을 파싱해서 blocks + projectConfig 를 추출한다.
    body = (await request.json()) as PreviewRequestBody;
  } catch {
    // 잘못된 JSON 요청에 대해서는 400 에러를 반환한다.
    return NextResponse.json({ message: "잘못된 JSON 요청입니다." }, { status: 400 });
  }

  const blocks = Array.isArray(body.blocks) ? body.blocks : [];
  const projectConfig = body.projectConfig;

  // Export 본문 HTML 은 기존 buildStaticHtml 을 재사용해서 생성한다.
  // 이렇게 하면 /api/export ZIP 라우트와 동일한 정적 HTML 을 얻을 수 있다.
  const html = buildStaticHtml(blocks, projectConfig);

  // Export 미리보기는 ZIP 이 아니라 순수 HTML 문자열을 반환한다.
  return new NextResponse(html, {
    status: 200,
    headers: {
      "Content-Type": "text/html; charset=utf-8",
    },
  });
}
