'use client';

import { notFound } from 'next/navigation';
import { EmptyPage } from '@/components/common/EmptyPage';
import { useEffect, useState } from 'react';

interface PageProps {
  params: Promise<{
    locale: string;
    slug: string[];
  }>;
}

/**
 * Catch-all 라우트: 정의되지 않은 모든 경로를 처리
 *
 * 로직:
 * 1. localStorage의 user.menu에서 유효한 경로인지 확인
 * 2. 메뉴에 있는 경로 (구현 안됨) → EmptyPage 표시
 * 3. 메뉴에 없는 완전 엉뚱한 경로 → not-found 페이지 표시
 *
 * 예시:
 * - /base/product/lists (메뉴에 있음) → EmptyPage
 * - /system/user/lists (메뉴에 있음) → EmptyPage
 * - /completely/random/path (메뉴에 없음) → 404
 */
interface MenuItem {
  path?: string;
  children?: MenuItem[];
}

export default function CatchAllPage({ params }: PageProps) {
  const [isValidPath, setIsValidPath] = useState<boolean | null>(null);

  useEffect(() => {
    const checkPath = async () => {
      const { slug } = await params;

      // localStorage에서 메뉴 데이터 가져오기
      const userStr = localStorage.getItem('user');
      if (!userStr) {
        setIsValidPath(false);
        return;
      }

      const userData = JSON.parse(userStr);
      const menus = userData.menu || [];

      // slug를 경로로 변환 (예: ['base', 'product', 'lists'] → '/base/product/lists')
      const requestedPath = `/${slug.join('/')}`;


      // 메뉴 구조를 재귀적으로 탐색하여 경로 확인
      const isPathInMenu = (menuItems: MenuItem[], path: string): boolean => {
        for (const item of menuItems) {

          // path가 요청된 경로와 일치하는지 확인
          if (item.path === path) {
            return true;
          }

          // 하위 메뉴 확인
          if (item.children && item.children.length > 0) {
            if (isPathInMenu(item.children, path)) {
              return true;
            }
          }
        }
        return false;
      };

      const pathExists = isPathInMenu(menus, requestedPath);
      setIsValidPath(pathExists);
    };

    void checkPath();
  }, [params]);

  // 로딩 중
  if (isValidPath === null) {
    return (
      <div className="flex items-center justify-center min-h-screen">
        <div className="text-muted-foreground">Loading...</div>
      </div>
    );
  }

  // 메뉴에 없는 경로 → 404
  if (!isValidPath) {
    notFound();
  }

  // 메뉴에 있지만 구현되지 않은 페이지 → EmptyPage
  return (
    <EmptyPage
      iconName="FileSearch"
      showBackButton={true}
      showHomeButton={true}
    />
  );
}