import { NextResponse } from "next/server";
import { getSessionUser } from "@/lib/auth/get-session-user";
import { runPostRegeneration } from "@/lib/generation/run-generation";
import { getGeneratedPost } from "@/lib/storage/generated-posts";
import type { GeneratePostRequest } from "@/types/workflow";

export async function POST(
  request: Request,
  { params }: { params: Promise<{ id: string }> },
) {
  try {
    const user = await getSessionUser();
    if (!user) {
      return NextResponse.json({ error: "Unauthorized" }, { status: 401 });
    }

    const { id } = await params;
    const parentPost = await getGeneratedPost(id);
    if (!parentPost) {
      return NextResponse.json({ error: "Post not found" }, { status: 404 });
    }
    if (parentPost.userId && parentPost.userId !== user.id) {
      return NextResponse.json({ error: "Forbidden" }, { status: 403 });
    }

    const body = (await request.json()) as GeneratePostRequest;
    if (!body.projectId || !body.project?.name) {
      return NextResponse.json({ error: "Project data is required" }, { status: 400 });
    }

    if (body.project.status === "paused") {
      return NextResponse.json(
        { error: "Project is paused.", code: "PROJECT_PAUSED" },
        { status: 403 },
      );
    }

    const post = await runPostRegeneration(parentPost, body, user.id);
    return NextResponse.json({ success: true, post });
  } catch (error) {
    const message = error instanceof Error ? error.message : "Regeneration failed";
    return NextResponse.json({ error: message }, { status: 400 });
  }
}
