import React, { useState, useEffect } from 'react'; import { motion } from 'framer-motion'; import { BrainCircuit, Loader2, Play, PenTool, BookOpen } from 'lucide-react'; import { useAuth } from 'react-oidc-context'; import { AuthButton } from './AuthButton'; import { QuizLibrary } from './QuizLibrary'; import { useQuizLibrary } from '../hooks/useQuizLibrary'; import type { Quiz } from '../types'; interface LandingProps { onGenerate: (topic: string) => void; onCreateManual: () => void; onLoadQuiz: (quiz: Quiz) => void; onJoin: (pin: string, name: string) => void; isLoading: boolean; error: string | null; } export const Landing: React.FC = ({ onGenerate, onCreateManual, onLoadQuiz, onJoin, isLoading, error }) => { const auth = useAuth(); const [mode, setMode] = useState<'HOST' | 'JOIN'>('HOST'); const [topic, setTopic] = useState(''); const [pin, setPin] = useState(''); const [name, setName] = useState(''); const [libraryOpen, setLibraryOpen] = useState(false); const { quizzes, loading: libraryLoading, loadingQuizId, deletingQuizId, error: libraryError, fetchQuizzes, loadQuiz, deleteQuiz, retry: retryLibrary } = useQuizLibrary(); useEffect(() => { if (libraryOpen && auth.isAuthenticated) { fetchQuizzes(); } }, [libraryOpen, auth.isAuthenticated, fetchQuizzes]); const handleHostSubmit = (e: React.FormEvent) => { e.preventDefault(); if (topic.trim()) onGenerate(topic); }; const handleJoinSubmit = (e: React.FormEvent) => { e.preventDefault(); if (pin.trim() && name.trim()) onJoin(pin, name); }; const handleLoadQuiz = async (id: string) => { try { const quiz = await loadQuiz(id); setLibraryOpen(false); onLoadQuiz(quiz); } catch (err) { if (err instanceof Error && err.message.includes('redirecting')) { return; } console.error('Failed to load quiz:', err); } }; return (

Kaboot

The AI Quiz Party

{mode === 'HOST' ? (
setTopic(e.target.value)} className="w-full p-4 text-xl font-bold border-2 border-gray-200 rounded-2xl focus:border-theme-primary focus:ring-4 focus:ring-theme-primary/20 outline-none transition-all placeholder:font-medium text-center" disabled={isLoading} />
OR
{auth.isAuthenticated && ( )}
) : (
setPin(e.target.value)} className="w-full p-4 text-xl font-bold border-2 border-gray-200 rounded-2xl focus:border-theme-primary focus:ring-4 focus:ring-theme-primary/20 outline-none text-center" /> setName(e.target.value)} className="w-full p-4 text-xl font-bold border-2 border-gray-200 rounded-2xl focus:border-theme-primary focus:ring-4 focus:ring-theme-primary/20 outline-none text-center" />
)} {error && (

{error}

)}
setLibraryOpen(false)} quizzes={quizzes} loading={libraryLoading} loadingQuizId={loadingQuizId} deletingQuizId={deletingQuizId} error={libraryError} onLoadQuiz={handleLoadQuiz} onDeleteQuiz={deleteQuiz} onRetry={retryLibrary} />
); };