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 { staffDocumentKinds } from "@/lib/application-schema";
export async function POST(
  request: Request,
  context: { params: Promise<{ id: string }> },
) {
  return applicationRoute(async () => {
    const providers = applicationProviders();
    await requireStaff(staffCookie(request, providers.mock), providers);
    const id = z.uuid().safeParse((await context.params).id);
    const input = z
      .object({ kind: z.enum(staffDocumentKinds) })
      .strict()
      .safeParse(await applicationBody(request, providers.origin));
    if (!id.success || !input.success)
      throw new ApplicationError(400, "Document unavailable.");
    const record = await providers.repo.get(id.data);
    if (!record || record.deleting)
      throw new ApplicationError(404, "Document unavailable.");
    const document = record.documents.find(
      (document) => document.kind === input.data.kind,
    );
    if (!document?.generation)
      throw new ApplicationError(
        404,
        "This document has not been verified or is unavailable.",
      );
    return applicationReply({
      url: await providers.download(
        document.path,
        document.generation,
        document.type,
      ),
      expiresIn: 60,
    });
  });
}
