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

type OperationalBenefitRequestBody = {
  enabled?: unknown;
};

function isSameOriginRequest(request: Request) {
  const origin = request.headers.get("origin");
  const forwardedHost = request.headers.get("x-forwarded-host")?.split(",")[0]?.trim();
  const host = forwardedHost || request.headers.get("host");

  if (!origin || !host) {
    return false;
  }

  try {
    return new URL(origin).host.toLowerCase() === host.toLowerCase();
  } catch {
    return false;
  }
}

export async function POST(
  request: Request,
  context: { params: Promise<{ domainId: string }> },
) {
  if (!isSameOriginRequest(request)) {
    return Response.json(
      { error: "forbidden-origin", message: "허용되지 않은 요청입니다." },
      { status: 403 },
    );
  }

  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 body = (await request.json().catch(() => ({}))) as OperationalBenefitRequestBody;

  if (typeof body.enabled !== "boolean") {
    return Response.json(
      { error: "invalid-request", message: "변경할 혜택 상태가 올바르지 않습니다." },
      { status: 400 },
    );
  }

  try {
    const result = await updateKavenixDomainOperationalBenefitById(
      Number(domainId),
      body.enabled,
    );
    const action = result.operationalBenefitEnabled ? "부여" : "해제";

    return Response.json({
      message: result.quotaSyncPending
        ? `${result.domain} 운영 계정 혜택을 ${action}했습니다. 메일함 용량은 다음 동기화에서 반영됩니다.`
        : `${result.domain} 운영 계정 혜택을 ${action}했습니다.`,
      ok: true,
      result,
    });
  } catch (error) {
    const code = error instanceof Error ? error.message : "";
    const message =
      code === "kavenix-domain-not-found"
        ? "혜택을 변경할 도메인을 찾을 수 없습니다."
        : code === "kavenix-domain-cleaned"
          ? "정리된 도메인에는 운영 계정 혜택을 적용할 수 없습니다."
          : code === "kavenix-operational-domain-hidden"
            ? "내부 운영 도메인의 혜택은 이 화면에서 변경할 수 없습니다."
            : "운영 계정 혜택을 변경하지 못했습니다. 잠시 후 다시 시도해주세요.";

    return Response.json(
      { error: "operational-benefit-update-failed", message },
      { status: code === "kavenix-domain-not-found" ? 404 : 400 },
    );
  }
}
