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;