import { getSessionUser } from "@/lib/auth";
import { regenerateMailSetupDkimByDomainId } from "@/lib/official-mail";
import { isKavenixAdminEmail } from "@/lib/kavenix-admin";

type DkimRequestBody = {
  keySize?: unknown;
};

export async function POST(
  request: Request,
  context: RouteContext<"/api/kavenix/domains/[domainId]/dkim">,
) {
  const user = await getSessionUser();

  if (!user) {
    return Response.json(
      { error: "unauthorized", message: "로그인이 필요합니다." },
      { status: 401 },
    );
  }

  if (!isKavenixAdminEmail(user.email)) {
    return Response.json(
      { error: "forbidden", message: "최고관리자만 DKIM 키를 재발급할 수 있습니다." },
      { status: 403 },
    );
  }

  const { domainId } = await context.params;
  const body = (await request.json().catch(() => ({}))) as DkimRequestBody;
  const keySize = body.keySize === 1024 ? 1024 : 2048;

  try {
    const result = await regenerateMailSetupDkimByDomainId(Number(domainId), keySize);

    return Response.json({
      message: `${result.domain}의 ${result.keySize}-bit DKIM 키를 새로 발급했습니다. DNS의 DKIM 값을 새 값으로 변경하세요.`,
      ok: true,
      result,
    });
  } catch (error) {
    return Response.json(
      {
        error: "dkim-regeneration-failed",
        message:
          error instanceof Error && error.message === "setup-not-found"
            ? "재발급할 도메인을 찾을 수 없습니다."
            : "DKIM 키 재발급에 실패했습니다. 잠시 후 다시 시도해주세요.",
      },
      { status: 400 },
    );
  }
}
