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

export async function POST() {
  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 },
    );
  }

  try {
    const result = await repairAllKavenixDomainProvisioningIssues();
    const message =
      result.candidateCount === 0
        ? `${result.checkedCount}개 도메인을 점검했습니다. 현재 자동 복구 가능한 메일함 또는 연결 상태 오류가 없습니다.`
        : result.failed.length === 0
          ? `${result.checkedCount}개 도메인을 점검하고 ${result.repaired.length}개 계정의 누락된 메일함 또는 연결 상태를 복구했습니다. 고객 DNS 값은 변경하지 않았습니다.`
          : `${result.checkedCount}개 도메인을 점검해 ${result.repaired.length}개의 메일함 또는 연결 상태를 복구했고 ${result.failed.length}개는 추가 확인이 필요합니다.`;

    return Response.json({ message, ok: true, result });
  } catch (error) {
    const inventoryUnavailable =
      error instanceof Error &&
      error.message === "kavenix-mailcow-inventory-unavailable";

    return Response.json(
      {
        error: inventoryUnavailable
          ? "mailcow-inventory-unavailable"
          : "domain-repair-all-failed",
        message: inventoryUnavailable
          ? "Mailcow 도메인 또는 메일함 목록을 확인할 수 없어 자동 복구하지 않았습니다. 잠시 후 다시 시도해주세요."
          : "메일 연결 상태 일괄 점검에 실패했습니다. 잠시 후 다시 시도해주세요.",
      },
      { status: 400 },
    );
  }
}
