import { z } from "zod";
import { applicationProviders } from "@/lib/application-providers";
import {
  applicationBody,
  applicationReply,
  applicationRoute,
} from "@/lib/application-http";
import { requireStaff, staffCookie } from "@/lib/staff-auth";
import { ApplicationError } from "@/lib/application-record";
import {
  prepareStaffDocument,
  verifyStaffDocument,
} from "@/lib/staff-documents";
export const runtime = "nodejs";
export async function POST(
  request: Request,
  context: { params: Promise<{ id: string }> },
) {
  return applicationRoute(async () => {
    const providers = applicationProviders(),
      staff = await requireStaff(
        staffCookie(request, providers.mock),
        providers,
      );
    const id = z.uuid().safeParse((await context.params).id);
    const body = z
      .object({ action: z.enum(["prepare", "verify"]), value: z.unknown() })
      .strict()
      .safeParse(await applicationBody(request, providers.origin));
    if (!id.success || !body.success)
      throw new ApplicationError(400, "Invalid document request.");
    const actor = {
      actor: staff.uid,
      author: staff.email.toLowerCase(),
      team: providers.config.STAFF_EMAIL_ALLOWLIST,
    };
    return applicationReply(
      body.data.action === "prepare"
        ? await prepareStaffDocument(id.data, body.data.value, actor, providers)
        : await verifyStaffDocument(id.data, body.data.value, actor, providers),
    );
  });
}
