import { getSessionUser } from "@/lib/auth";
import {
  cleanupKavenixDomainById,
  isKavenixAdminEmail,
} from "@/lib/kavenix-admin";

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

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

  if (!isKavenixAdminEmail(user.email)) {
    return Response.json(
      { error: "forbidden", message: "최고관리자만 도메인을 정리할 수 있습니다." },
      { status: 403 },
    );
  }

  const { domainId } = await context.params;
  const numericDomainId = Number(domainId);

  try {
    const body = (await request.json().catch(() => ({}))) as {
      confirmationDomain?: string;
    };
    const result = await cleanupKavenixDomainById(
      numericDomainId,
      body.confirmationDomain ?? "",
    );

    return Response.json({
      message: `${result.domain} 계정과 소속 도메인·메일 데이터를 영구 삭제했습니다.`,
      ok: true,
      result,
    });
  } catch (error) {
    return Response.json(
      {
        error: "domain-cleanup-failed",
        message:
          error instanceof Error && error.message === "kavenix-domain-not-found"
            ? "정리할 도메인을 찾을 수 없습니다."
            : error instanceof Error &&
                error.message === "kavenix-domain-cleanup-confirmation-mismatch"
              ? "확인용 도메인이 일치하지 않습니다."
            : error instanceof Error
              ? error.message
              : "도메인 정리에 실패했습니다.",
      },
      { status: 400 },
    );
  }
}
