import { useEffect } from 'react';
import { callLogoutAPI } from '@/lib/auth/logout';

/**
 * Auth Guard Hook
 *
 * Purpose:
 * - Protect pages from unauthenticated access
 * - Prevent browser back button cache issues
 * - Real-time authentication validation
 *
 * Usage:
 * ```tsx
 * export default function ProtectedPage() {
 *   useAuthGuard();
 *   // ... rest of component
 * }
 * ```
 */
export function useAuthGuard() {
  useEffect(() => {
    console.log('🔄 useAuthGuard: Starting auth check...');

    // 페이지 로드 시 인증 확인
    const checkAuth = async () => {
      try {
        console.log('📡 Fetching /api/auth/check...');
        // 🔵 Next.js 내부 API - 쿠키에서 토큰 확인 (PHP 호출 X, 성능 최적화)
        const response = await fetch('/api/auth/check', {
          method: 'GET',
          cache: 'no-store',
        });

        console.log('📥 Response status:', response.status);

        if (!response.ok) {
          // 인증 실패 시:
          // 1. 서버 로그아웃 API 호출하여 HttpOnly 쿠키 삭제
          // 2. 쿠키 삭제 후 로그인 페이지로 이동
          // (쿠키가 남아있으면 미들웨어가 대시보드로 리다이렉트하는 버그 방지)
          console.log('⚠️ 인증 실패: 쿠키 삭제 후 로그인 페이지로 이동');
          await callLogoutAPI();
          window.location.href = '/login';
        } else {
          console.log('✅ 인증 성공');
        }
      } catch (error) {
        console.error('❌ 인증 확인 오류:', error);
        await callLogoutAPI();
        window.location.href = '/login';
      }
    };

    checkAuth();

    // 뒤로가기 시 페이지 새로고침 강제
    const handlePageShow = (event: PageTransitionEvent) => {
      if (event.persisted) {
        // 브라우저 캐시에서 로드된 경우 새로고침
        console.log('🔄 캐시된 페이지 감지: 새로고침');
        window.location.reload();
      }
    };

    window.addEventListener('pageshow', handlePageShow);

    // Cleanup
    return () => {
      window.removeEventListener('pageshow', handlePageShow);
    };
  }, []);
}
