import React, { useMemo, useCallback } from 'react';
import { useNavigate } from 'react-router-dom';
import { useAnimation } from '../context/AnimationContext';
import { useToast } from './useToast';
import { useVisualSettings } from '../context/VisualSettingsContext';
import { useAchievements } from '../context/AchievementContext';
import { useAboutData } from './useAboutData';
import { version } from '../version';
import {
KEY_SIDEBAR_STATE,
remove as removeLocalStorageItem,
} from '../utils/LocalStorageManager';
import LiveClock from '../components/LiveClock';
import GenerativeArt from '../components/GenerativeArt';
import LuxeArt from '../components/LuxeArt';
import TextTransformer from '../components/TextTransformer';
import Stopwatch from '../components/Stopwatch';
import { BugIcon, SparkleIcon } from '@phosphor-icons/react';
// Wrapper for GenerativeArt to handle state locally
const GenerativeArtCommand = () => {
const [seed, setSeed] = React.useState(() =>
Math.random().toString(36).substring(7),
);
const handleRegenerate = () => {
setSeed(Math.random().toString(36).substring(7));
};
return (
Posts: {postCount}
Projects: {projectCount}
Logs: {logCount}
Apps: {appCount}
Version: v{version}
, ); }, latestPost: () => { const posts = items.filter((i) => i.type === 'post'); if (posts.length > 0) { posts.sort((a, b) => new Date(b.date) - new Date(a.date)); navigate(posts[0].path); } }, latestLog: () => { const logs = items.filter((i) => i.type === 'log'); if (logs.length > 0) { logs.sort((a, b) => new Date(b.date) - new Date(a.date)); navigate(logs[0].path); } }, herDaim: () => { unlockAchievement('her_daim'); openGenericModal( 'Her Daim',
,
);
},
doBarrelRoll: () => {
unlockAchievement('do_a_barrel_roll');
document.body.classList.add('do-a-barrel-roll');
addToast({
title: 'Wheeeee!',
message: 'Do a Barrel Roll!',
duration: 1000,
});
setTimeout(() => {
document.body.classList.remove('do-a-barrel-roll');
}, 1000);
},
toggleInvertColors: () => {
toggleInvert();
addToast({
title: !isInverted ? 'Colors Inverted' : 'Colors Restored',
message: !isInverted
? 'Welcome to the upside down!'
: 'Back to normal!',
duration: 2000,
});
},
partyMode: () => {
toggleParty();
addToast({
title: !isParty ? "Let's Party!" : 'Party Over',
message: !isParty
? 'Boots and cats and boots and cats!'
: "Party's over...",
duration: 2000,
});
},
toggleRetroMode: () => {
toggleRetro();
addToast({
title: !isRetro ? 'Retro Mode On' : 'Retro Mode Off',
message: !isRetro ? '80s Vibes Initiated.' : 'Back to the future!',
duration: 2000,
});
},
toggleMirrorMode: () => {
toggleMirror();
addToast({
title: !isMirror ? 'Mirror Mode On' : 'Mirror Mode Off',
message: !isMirror
? 'Through the looking glass...'
: 'Reflections normalized.',
duration: 2000,
});
},
toggleNoirMode: () => {
toggleNoir();
addToast({
title: !isNoir ? 'Noir Mode On' : 'Noir Mode Off',
message: !isNoir
? 'It was a dark and stormy night...'
: 'Color returns to the world.',
duration: 2000,
});
},
toggleTerminalMode: () => {
toggleTerminal();
addToast({
title: !isTerminal ? 'Terminal Mode On' : 'Terminal Mode Off',
message: !isTerminal ? 'System Online.' : 'System Offline.',
duration: 2000,
});
},
toggleBlueprintMode: () => {
toggleBlueprint();
addToast({
title: !isBlueprint ? 'Blueprint Mode On' : 'Blueprint Mode Off',
message: !isBlueprint
? 'Entering Construction Mode.'
: 'Blueprint Stored.',
duration: 2000,
});
},
toggleSepiaMode: () => {
toggleSepia();
addToast({
title: !isSepia ? 'Sepia Mode On' : 'Sepia Mode Off',
message: !isSepia ? 'Time travel initiated.' : 'Back to the present.',
duration: 2000,
});
},
toggleVaporwaveMode: () => {
toggleVaporwave();
addToast({
title: !isVaporwave ? 'Vaporwave Mode On' : 'Vaporwave Mode Off',
message: !isVaporwave ? 'A E S T H E T I C S.' : 'Reality restored.',
duration: 2000,
});
},
toggleCyberpunkMode: () => {
toggleCyberpunk();
addToast({
title: !isCyberpunk ? 'Cyberpunk Mode On' : 'Cyberpunk Mode Off',
message: !isCyberpunk ? 'Wake up, Samurai.' : 'System normal.',
duration: 2000,
});
},
toggleGameboyMode: () => {
toggleGameboy();
addToast({
title: !isGameboy ? 'Game Boy Mode On' : 'Game Boy Mode Off',
message: !isGameboy ? 'Press Start to play.' : 'Game Over.',
duration: 2000,
});
},
toggleComicMode: () => {
toggleComic();
addToast({
title: !isComic ? 'Comic Mode On' : 'Comic Mode Off',
message: !isComic ? 'BAM! POW! ZAP!' : 'Story arc ended.',
duration: 2000,
});
},
toggleSketchbookMode: () => {
toggleSketchbook();
addToast({
title: !isSketchbook ? 'Sketchbook Mode On' : 'Sketchbook Mode Off',
message: !isSketchbook ? 'Pencil sharpened.' : 'Notebook closed.',
duration: 2000,
});
},
toggleHellenicMode: () => {
toggleHellenic();
addToast({
title: !isHellenic ? 'Hellenic Mode On' : 'Hellenic Mode Off',
message: !isHellenic ? 'Welcome to Olympus.' : 'Leaving the Agora.',
duration: 2000,
});
},
toggleGlitchMode: () => {
toggleGlitch();
addToast({
title: !isGlitch ? 'Glitch Mode On' : 'Glitch Mode Off',
message: !isGlitch
? 'System corruption detected.'
: 'Signal stabilized.',
duration: 2000,
});
},
toggleGardenMode: () => {
toggleGarden();
addToast({
title: !isGarden ? 'Garden Mode On' : 'Garden Mode Off',
message: !isGarden
? 'Bloom where you are planted.'
: 'Winter is coming.',
duration: 2000,
});
},
toggleAutumnMode: () => {
toggleAutumn();
addToast({
title: !isAutumn ? 'Autumn Mode On' : 'Autumn Mode Off',
message: !isAutumn ? 'The leaves are falling.' : 'Spring has sprung.',
duration: 2000,
});
},
toggleRainMode: () => {
toggleRain();
addToast({
title: !isRain ? 'Rain Mode On' : 'Rain Mode Off',
message: !isRain ? "It's raining, it's pouring." : 'The sun is out.',
duration: 2000,
});
},
toggleFalloutMode: () => {
toggleFalloutOverlay();
addToast({
title: !isFalloutOverlay
? 'Fallout Overlay Active'
: 'Fallout Overlay Disabled',
message: !isFalloutOverlay
? `Welcome to the Wasteland. (${falloutVariant.toUpperCase()})`
: 'Returning to pre-war reality.',
duration: 2000,
});
},
switchFalloutVariant: () => {
const newVariant = falloutVariant === 'amber' ? 'green' : 'amber';
setFalloutVariant(newVariant);
addToast({
title: 'Fallout Overlay Color Changed',
message: `HUD Color set to: ${newVariant.toUpperCase()}`,
duration: 2000,
});
},
showTime: () => {
unlockAchievement('time_teller');
openGenericModal('Current Time', User Agent: {navigator.userAgent}
Platform: {navigator.platform}
App Version: {navigator.appVersion}
Language: {navigator.language}
Online: {navigator.onLine ? 'Yes' : 'No'}