import { NextResponse } from "next/server";
import { getSessionUser } from "@/lib/auth/get-session-user";
import { getUserProjects } from "@/lib/storage/projects";
import { saveGeneratedPost } from "@/lib/storage/generated-posts";
import { attachManualContentQa } from "@/lib/content/manual-content-qa";
import {
  buildContentPost,
  createManualPostInput,
  validateManualPostBody,
  type ManualPostBody,
} from "@/lib/content/manual-post";

async function resolveProjectContext(userId: string, projectId: string) {
  const snapshot = await getUserProjects(userId);
  const project = snapshot?.projects.find((p) => p.id === projectId);
  const data = snapshot?.dataByProjectId?.[projectId];
  if (!project || !data) return null;
  return { project, brand: data.brand, context: data.context };
}

export async function POST(request: Request) {
  const user = await getSessionUser();
  if (!user) {
    return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
  }

  const body = (await request.json()) as ManualPostBody;
  const validationError = validateManualPostBody(body);
  if (validationError) {
    return NextResponse.json({ error: validationError }, { status: 400 });
  }

  const ctx = await resolveProjectContext(user.id, body.projectId);
  if (!ctx) {
    return NextResponse.json({ error: "Project not found" }, { status: 404 });
  }

  const input = createManualPostInput(user.id, body, ctx.project, ctx.brand, ctx.context);
  const post = attachManualContentQa(buildContentPost(input), ctx.brand, ctx.context);
  const saved = await saveGeneratedPost(post);

  return NextResponse.json({ success: true, post: saved }, { status: 201 });
}
