'use client';

import { useEffect, useState } from 'react';
import { useRouter, useSearchParams } from 'next/navigation';
import { transformApiMenusToMenuItems } from '@/lib/utils/menuTransform';
import { performFullLogout } from '@/lib/auth/logout';

/**
 * MNG 관리자 패널 → SAM 자동 로그인 페이지
 *
 * 흐름:
 * 1. MNG에서 "SAM 접속" 클릭 → /auto-login?token=xxx 로 새 창 열림
 * 2. 기존 세션 로그아웃 (쿠키 + localStorage + Zustand 초기화)
 * 3. One-Time Token으로 API 호출 → 새 세션 생성
 * 4. 사용자 정보 저장 후 /dashboard로 이동
 */
export default function AutoLoginPage() {
  const router = useRouter();
  const searchParams = useSearchParams();
  const [status, setStatus] = useState<'processing' | 'error'>('processing');
  const [errorMessage, setErrorMessage] = useState('');

  useEffect(() => {
    const token = searchParams.get('token');

    if (!token) {
      setStatus('error');
      setErrorMessage('로그인 토큰이 없습니다.');
      return;
    }

    const performAutoLogin = async () => {
      try {
        // 1. 기존 세션 완전 로그아웃 (쿠키 삭제 + 스토어 초기화)
        await performFullLogout({ skipServerLogout: false });

        // 2. One-Time Token으로 로그인
        const response = await fetch('/api/auth/token-login', {
          method: 'POST',
          headers: { 'Content-Type': 'application/json' },
          body: JSON.stringify({ token }),
        });

        const data = await response.json();

        if (!response.ok) {
          throw new Error(data.error || '자동 로그인에 실패했습니다.');
        }

        // 3. 사용자 정보 localStorage 저장 (LoginPage와 동일 패턴)
        const transformedMenus = transformApiMenusToMenuItems(data.menus || []);

        const userData = {
          id: data.user?.id,
          name: data.user?.name,
          position: data.roles?.[0]?.description || '사용자',
          userId: data.user?.user_id,
          department: data.user?.department || null,
          department_id: data.user?.department_id || null,
          menu: transformedMenus,
          roles: data.roles || [],
          tenant: data.tenant || {},
        };
        localStorage.setItem('user', JSON.stringify(userData));

        // 4. persist store rehydrate
        const { useFavoritesStore } = await import('@/stores/favoritesStore');
        const { useTableColumnStore } = await import('@/stores/useTableColumnStore');
        useFavoritesStore.persist.rehydrate();
        useTableColumnStore.persist.rehydrate();

        // 5. 로그인 플래그 설정
        sessionStorage.setItem('auth_just_logged_in', 'true');

        // 6. 대시보드로 이동
        router.push('/dashboard');
      } catch (err) {
        console.error('자동 로그인 실패:', err);
        setStatus('error');
        setErrorMessage(err instanceof Error ? err.message : '자동 로그인에 실패했습니다.');
      }
    };

    performAutoLogin();
  }, [searchParams, router]);

  if (status === 'error') {
    return (
      <div className="min-h-screen flex items-center justify-center bg-background">
        <div className="text-center space-y-4 p-8">
          <div className="text-destructive text-lg font-semibold">자동 로그인 실패</div>
          <p className="text-muted-foreground">{errorMessage}</p>
          <button
            onClick={() => router.push('/login')}
            className="px-4 py-2 bg-primary text-primary-foreground rounded-lg hover:bg-primary/90 transition"
          >
            로그인 페이지로 이동
          </button>
        </div>
      </div>
    );
  }

  return (
    <div className="min-h-screen flex items-center justify-center bg-background">
      <div className="text-center space-y-4">
        <div className="inline-block h-10 w-10 animate-spin rounded-full border-4 border-solid border-primary border-r-transparent" />
        <p className="text-muted-foreground">자동 로그인 중...</p>
      </div>
    </div>
  );
}