import { NextResponse } from "next/server";
import { prisma } from "@/lib/db";
import { requireAuth } from "@/lib/auth/middleware";
import { buildQueue } from "@/lib/queue";

export async function POST(req: Request, ctx: { params: Promise<{ id: string }> }) {
  const auth = await requireAuth(req);
  if (!auth.ok) return NextResponse.json({ error: "unauthorized" }, { status: auth.status });
  const { id } = await ctx.params;
  const project = await prisma.project.findUnique({ where: { id } });
  if (!project) return NextResponse.json({ error: "project_not_found" }, { status: 404 });
  if (!project.deployTargetId) return NextResponse.json({ error: "no_deploy_target" }, { status: 400 });

  const registry = process.env.PM_REGISTRY ?? "127.0.0.1:5000";
  const sha = (project.lastCommitHash ?? "nocommit").slice(0, 7);
  const ver = project.version ?? "0.0.0";
  const imageTag = `${registry}/${project.name}:${ver}-${sha}`;

  const dep = await prisma.deployHistory.create({
    data: {
      projectId: id,
      imageTag,
      commitHash: project.lastCommitHash,
      status: "queued",
      targetId: project.deployTargetId,
    },
  });

  await buildQueue.add("build", {
    deployId: dep.id,
    projectId: id,
    imageTag,
  });

  return NextResponse.json({ ok: true, deployId: dep.id, imageTag });
}
