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

type DkimUsageRequestBody = {
  enabled?: unknown;
};

export async function POST(
  request: Request,
  context: RouteContext<"/api/kavenix/domains/[domainId]/dkim-usage">,
) {
  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 DkimUsageRequestBody;
  const enabled = body.enabled === true;

  try {
    const result = await updateMailSetupDkimUsageByDomainId(
      Number(domainId),
      enabled,
    );

    return Response.json({
      message: result.dkimEnabled
        ? `${result.domain}에서 DKIM 사용을 켰습니다. 연결 상태를 다시 확인했습니다.`
        : `${result.domain}에서 DKIM 검증을 건너뜁니다. SPF와 DMARC는 계속 확인합니다.`,
      ok: true,
      result,
    });
  } catch (error) {
    return Response.json(
      {
        error: "dkim-usage-update-failed",
        message:
          error instanceof Error && error.message === "setup-not-found"
            ? "설정을 변경할 도메인을 찾을 수 없습니다."
            : "DKIM 사용 설정을 변경하지 못했습니다. 잠시 후 다시 시도해주세요.",
      },
      { status: 400 },
    );
  }
}
