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

export async function POST(
  _request: Request,
  context: RouteContext<"/api/kavenix/domains/[domainId]/verify">,
) {
  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;

  try {
    const result = await verifyMailSetupByDomainId(Number(domainId));

    return Response.json({
      message: result.verified
        ? `${result.domain} 연결이 정상입니다.`
        : `${result.domain} 점검을 완료했습니다. 불일치한 항목을 확인해 주세요.`,
      ok: true,
      verified: result.verified,
    });
  } catch (error) {
    return Response.json(
      {
        error: "domain-verification-failed",
        message:
          error instanceof Error && error.message === "setup-not-found"
            ? "검증할 대표 메일함을 찾을 수 없습니다."
            : "연결 상태 확인에 실패했습니다. 잠시 후 다시 시도해주세요.",
      },
      { status: 400 },
    );
  }
}
