import { randomUUID } from "node:crypto";
import { getAdmin } from "../../../../../../lib/admin-auth";
import { publicUrl, audit } from "../../../../../../lib/admin-operations";
import { DB } from "../../../../../../server/database.ts";
export async function POST(
  request: Request,
  { params }: { params: Promise<{ id: string }> },
) {
  const admin = await getAdmin();
  if (!admin) return Response.json({ error: "unauthorized" }, { status: 401 });
  const { id } = await params;
  const application = await DB.prepare(
    "SELECT id FROM applications WHERE id=? AND deleted_at IS NULL",
  )
    .bind(id)
    .first();
  if (!application)
    return Response.json({ error: "not_found" }, { status: 404 });
  const now = new Date().toISOString(),
    recipients = (process.env.ADMIN_EMAILS || "")
      .split(",")
      .map((s) => s.trim())
      .filter(Boolean);
  if (!recipients.length)
    return Response.json({ error: "email_not_configured" }, { status: 503 });
  const statements = recipients.flatMap((to) => {
    const cid = randomUUID();
    return [
      DB.prepare(
        "INSERT INTO communications(id,application_id,recipient,template_key,status,attempts,created_at,updated_at) VALUES (?,?,?,'APPLICATION_INTERNAL_NOTIFICATION','PENDING',0,?,?)",
      ).bind(cid, id, to, now, now),
      DB.prepare(
        "INSERT INTO outbox_jobs(id,kind,resource_id,status,attempts,available_at,created_at,updated_at) VALUES (?,'SEND_APPLICATION_EMAIL',?,'PENDING',0,?,?,?)",
      ).bind(randomUUID(), cid, now, now, now),
    ];
  });
  await DB.batch(statements);
  await audit(admin.userId, "NOTIFICATION_QUEUED", "APPLICATION", id);
  return Response.redirect(
    publicUrl(request, `/administracao/candidaturas/${id}?notification=queued`),
    303,
  );
}
