import { useState, useMemo } from "react"; import { WelcomeScreen } from "@/components/WelcomeScreen"; import { BuzzwordCard } from "@/components/BuzzwordCard"; import { ResultsScreen } from "@/components/ResultsScreen"; import { buzzwords, profiles, Buzzword, ProfileResult } from "@/data/buzzwords"; type GameState = 'welcome' | 'playing' | 'results'; interface Answer { buzzword: Buzzword; optionId: string; } const Index = () => { const [gameState, setGameState] = useState('welcome'); const [currentIndex, setCurrentIndex] = useState(0); const [answers, setAnswers] = useState([]); // Select 12 random buzzwords for the quiz const selectedBuzzwords = useMemo(() => { const shuffled = [...buzzwords].sort(() => Math.random() - 0.5); return shuffled.slice(0, 12); }, []); const handleStart = () => { setGameState('playing'); setCurrentIndex(0); setAnswers([]); }; const handleAnswer = (optionId: string) => { const newAnswer: Answer = { buzzword: selectedBuzzwords[currentIndex], optionId, }; const newAnswers = [...answers, newAnswer]; setAnswers(newAnswers); if (currentIndex < selectedBuzzwords.length - 1) { setCurrentIndex(currentIndex + 1); } else { setGameState('results'); } }; const calculateProfile = (): ProfileResult => { const counts = { intentional: 0, autopilot: 0, ironic: 0, avoid: 0, guilty: 0, unaware: 0, }; answers.forEach(answer => { counts[answer.optionId as keyof typeof counts]++; }); // Determine profile based on most common answer pattern const maxCount = Math.max(...Object.values(counts)); const dominantTypes = Object.entries(counts) .filter(([_, count]) => count === maxCount) .map(([type]) => type); // Profile mapping logic if (dominantTypes.includes('intentional') || (dominantTypes.includes('ironic') && counts.ironic >= 3)) { return profiles.find(p => p.type === 'aware-strategist')!; } if (dominantTypes.includes('guilty') || (counts.autopilot >= 3 && counts.guilty >= 2)) { return profiles.find(p => p.type === 'recovering-corporatist')!; } if (dominantTypes.includes('ironic')) { return profiles.find(p => p.type === 'ironic-observer')!; } if (dominantTypes.includes('avoid')) { return profiles.find(p => p.type === 'reformed-rebel')!; } if (dominantTypes.includes('unaware') || dominantTypes.includes('autopilot')) { return profiles.find(p => p.type === 'blissful-user')!; } // Default fallback return profiles.find(p => p.type === 'recovering-corporatist')!; }; const handleRestart = () => { setGameState('welcome'); setCurrentIndex(0); setAnswers([]); }; return (
{gameState === 'welcome' && ( )} {gameState === 'playing' && ( )} {gameState === 'results' && ( )}
); }; export default Index;