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 result = await cleanupKavenixDomainById(numericDomainId);

    return Response.json({
      message: result.alreadyCleaned
        ? `${result.domain} 도메인은 이미 정리되어 있습니다.`
        : `${result.domain}의 Mailcow 도메인과 소속 메일함을 삭제했습니다.`,
      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
              : "도메인 정리에 실패했습니다.",
      },
      { status: 400 },
    );
  }
}
