"use client";

import { useEffect } from "react";
import { usePathname, useRouter } from "next/navigation";
import { apiClient } from "@/lib/api/client";
import { extractTenantSubdomain } from "@/lib/tenant/subdomain";

const CHECK_CACHE_KEY = "tenant-check-ok";

/**
 * 테넌트 서브도메인 접근 차단 Guard.
 * - 메인 사이트(solution.invyone.com 등 예약어) 는 통과
 * - *.invyone.com 테넌트 서브도메인은 백엔드 /api/tenant/check 로 존재 검증
 * - 미등록 회사면 /tenant-not-found 로 리다이렉트
 *
 * 같은 세션 내 재체크를 피하려고 sessionStorage 에 1회 캐시.
 */
export function TenantGuard({ children }: { children: React.ReactNode }) {
  const router = useRouter();
  const pathname = usePathname();

  useEffect(() => {
    if (typeof window === "undefined") return;
    if (pathname === "/tenant-not-found") return;

    const sub = extractTenantSubdomain(window.location.hostname);
    if (!sub) return;

    if (sessionStorage.getItem(CHECK_CACHE_KEY) === sub) return;

    apiClient
      .get(`/tenant/check`, { params: { subdomain: sub } })
      .then((res) => {
        if (res.data?.exists) {
          sessionStorage.setItem(CHECK_CACHE_KEY, sub);
        } else {
          router.replace("/tenant-not-found");
        }
      })
      .catch(() => {
        // API 호출 실패 시 낙관적으로 통과. 백엔드 잠시 재기동 중일 수 있음.
      });
  }, [pathname, router]);

  return <>{children}</>;
}
