import { useState } from 'react'; import { motion, AnimatePresence } from 'framer-motion'; import { Settings, Monitor, Volume2, Cpu, X, Contrast } from 'lucide-react'; import { useSettings } from '@/contexts/SettingsContext'; import { useAchievements } from '@/contexts/AchievementsContext'; import CryptoConsentModal from './CryptoConsentModal'; interface SettingsPanelProps { onToggleTheme: () => void; isRedTheme: boolean; } const SettingsPanel = ({ onToggleTheme, isRedTheme }: SettingsPanelProps) => { const [isOpen, setIsOpen] = useState(false); const [showCryptoModal, setShowCryptoModal] = useState(false); const { crtEnabled, setCrtEnabled, soundEnabled, setSoundEnabled, cryptoConsent, playSound } = useSettings(); const { unlockAchievement } = useAchievements(); const handleToggle = (setter: (value: boolean) => void, currentValue: boolean, achievementId?: string) => { playSound('click'); setter(!currentValue); if (achievementId) unlockAchievement(achievementId); }; return ( <> { playSound('click'); setIsOpen(!isOpen); }} aria-label="Open settings" className="fixed top-4 right-4 z-[150] p-2 border border-primary text-primary bg-background/80 transition-all duration-300 hover:bg-primary hover:text-background box-glow" > {isOpen && ( Settings setIsOpen(false)} aria-label="Close settings" className="text-primary hover:text-primary/80" > {/* Theme Toggle */} Color Theme {isRedTheme ? 'RED' : 'GREEN'} {/* CRT Toggle */} CRT Effects handleToggle(setCrtEnabled, crtEnabled, 'crt_toggler')} className={`w-12 h-6 rounded-full border border-primary transition-all duration-300 ${ crtEnabled ? 'bg-primary' : 'bg-transparent' }`} > {/* Sound Toggle */} Sound Effects handleToggle(setSoundEnabled, soundEnabled, 'sound_toggler')} className={`w-12 h-6 rounded-full border border-primary transition-all duration-300 ${ soundEnabled ? 'bg-primary' : 'bg-transparent' }`} > {/* Crypto Consent */} CPU Mining { playSound('click'); setShowCryptoModal(true); }} className={`px-3 py-1 text-xs font-pixel border border-primary transition-all duration-300 ${ cryptoConsent ? 'bg-primary text-background' : 'bg-transparent text-primary hover:bg-primary hover:text-background' }`} > {cryptoConsent ? 'ON' : 'OFF'} Settings are saved locally )} setShowCryptoModal(false)} /> > ); }; export default SettingsPanel;
Settings are saved locally