'use client' import { useCallback, useState } from 'react' import { AnimatePresence } from 'framer-motion' import { useSlideNavigation } from '@/lib/hooks/useSlideNavigation' import { useKeyboard } from '@/lib/hooks/useKeyboard' import { usePitchData } from '@/lib/hooks/usePitchData' import { Language, PitchData } from '@/lib/types' import ParticleBackground from './ParticleBackground' import ProgressBar from './ProgressBar' import NavigationControls from './NavigationControls' import NavigationFAB from './NavigationFAB' import ChatFAB from './ChatFAB' import SlideOverview from './SlideOverview' import SlideContainer from './SlideContainer' import CoverSlide from './slides/CoverSlide' import ProblemSlide from './slides/ProblemSlide' import SolutionSlide from './slides/SolutionSlide' import ProductSlide from './slides/ProductSlide' import HowItWorksSlide from './slides/HowItWorksSlide' import MarketSlide from './slides/MarketSlide' import BusinessModelSlide from './slides/BusinessModelSlide' import TractionSlide from './slides/TractionSlide' import CompetitionSlide from './slides/CompetitionSlide' import TeamSlide from './slides/TeamSlide' import TechnologySlide from './slides/TechnologySlide' import FinancialsSlide from './slides/FinancialsSlide' import TheAskSlide from './slides/TheAskSlide' import AIQASlide from './slides/AIQASlide' import AppendixSlide from './slides/AppendixSlide' import AnnexInfraSlide from './slides/AnnexInfraSlide' import AnnexAIStackSlide from './slides/AnnexAIStackSlide' import AnnexRAGSlide from './slides/AnnexRAGSlide' import AnnexSecuritySlide from './slides/AnnexSecuritySlide' import AnnexDevOpsSlide from './slides/AnnexDevOpsSlide' import AnnexAgentArchSlide from './slides/AnnexAgentArchSlide' import AnnexAgentRAGSlide from './slides/AnnexAgentRAGSlide' import AnnexAgentWorkflowSlide from './slides/AnnexAgentWorkflowSlide' import AnnexUSPOverviewSlide from './slides/AnnexUSPOverviewSlide' import AnnexUSPComparisonSlide from './slides/AnnexUSPComparisonSlide' import AnnexUSPMoatSlide from './slides/AnnexUSPMoatSlide' import AnnexRoadmap2027Slide from './slides/AnnexRoadmap2027Slide' import AnnexRoadmap2028Slide from './slides/AnnexRoadmap2028Slide' interface PitchDeckProps { lang: Language onToggleLanguage: () => void } export default function PitchDeck({ lang, onToggleLanguage }: PitchDeckProps) { const { data, loading, error } = usePitchData() const nav = useSlideNavigation() const [fabOpen, setFabOpen] = useState(false) const toggleFullscreen = useCallback(() => { if (!document.fullscreenElement) { document.documentElement.requestFullscreen() } else { document.exitFullscreen() } }, []) const toggleMenu = useCallback(() => { setFabOpen(prev => !prev) }, []) useKeyboard({ onNext: nav.nextSlide, onPrev: nav.prevSlide, onFirst: nav.goToFirst, onLast: nav.goToLast, onOverview: nav.toggleOverview, onFullscreen: toggleFullscreen, onLanguageToggle: onToggleLanguage, onMenuToggle: toggleMenu, onGoToSlide: nav.goToSlide, enabled: !nav.showOverview, }) if (loading) { return (

{lang === 'de' ? 'Lade Pitch-Daten...' : 'Loading pitch data...'}

) } if (error || !data) { return (

{lang === 'de' ? 'Fehler beim Laden' : 'Loading error'}

{error || 'No data'}

) } function renderSlide() { if (!data) return null switch (nav.currentSlide) { case 'cover': return case 'problem': return case 'solution': return case 'product': return case 'how-it-works': return case 'market': return case 'business-model': return case 'traction': return case 'competition': return case 'team': return case 'technology': return case 'financials': return case 'the-ask': return case 'ai-qa': return case 'appendix': return case 'annex-infra': return case 'annex-ai-stack': return case 'annex-rag': return case 'annex-security': return case 'annex-devops': return case 'annex-agent-arch': return case 'annex-agent-rag': return case 'annex-agent-workflow': return case 'annex-usp-overview': return case 'annex-usp-comparison': return case 'annex-usp-moat': return case 'annex-roadmap-2027': return case 'annex-roadmap-2028': return default: return null } } return (
{renderSlide()} {nav.showOverview && ( nav.setShowOverview(false)} lang={lang} /> )}
) }