'use client' import { useState, useEffect } from 'react' import { useRouter } from 'next/navigation' import { useAuth } from '@/lib/hooks/use-auth' import { useAuthStore } from '@/lib/stores/auth-store' import { getConfig } from '@/lib/config' import { Button } from '@/components/ui/button' import { Input } from '@/components/ui/input' import { Card, CardContent, CardDescription, CardHeader, CardTitle } from '@/components/ui/card' import { AlertCircle } from 'lucide-react' import { LoadingSpinner } from '@/components/common/LoadingSpinner' export function LoginForm() { const [password, setPassword] = useState('') const { login, isLoading, error } = useAuth() const { authRequired, checkAuthRequired, hasHydrated, isAuthenticated } = useAuthStore() const [isCheckingAuth, setIsCheckingAuth] = useState(true) const [configInfo, setConfigInfo] = useState<{ apiUrl: string; version: string; buildTime: string } | null>(null) const router = useRouter() // Load config info for debugging useEffect(() => { getConfig().then(cfg => { setConfigInfo({ apiUrl: cfg.apiUrl, version: cfg.version, buildTime: cfg.buildTime, }) }).catch(err => { console.error('Failed to load config:', err) }) }, []) // Check if authentication is required on mount useEffect(() => { if (!hasHydrated) { return } const checkAuth = async () => { try { const required = await checkAuthRequired() // If auth is not required, redirect to notebooks if (!required) { router.push('/notebooks') } } catch (error) { console.error('Error checking auth requirement:', error) // On error, assume auth is required to be safe } finally { setIsCheckingAuth(false) } } // If we already know auth status, use it if (authRequired !== null) { if (!authRequired && isAuthenticated) { router.push('/notebooks') } else { setIsCheckingAuth(false) } } else { void checkAuth() } }, [hasHydrated, authRequired, checkAuthRequired, router, isAuthenticated]) // Show loading while checking if auth is required if (!hasHydrated || isCheckingAuth) { return (