'use client'

import { useState, useCallback } from 'react'
import { SlideId } from '../types'

const SLIDE_ORDER: SlideId[] = [
  'cover',
  'problem',
  'solution',
  'product',
  'how-it-works',
  'market',
  'business-model',
  'traction',
  'competition',
  'team',
  'technology',
  'financials',
  'the-ask',
  'ai-qa',
  'appendix',
  'annex-infra',
  'annex-ai-stack',
  'annex-rag',
  'annex-security',
  'annex-devops',
  'annex-agent-arch',
  'annex-agent-rag',
  'annex-agent-workflow',
  'annex-usp-overview',
  'annex-usp-comparison',
  'annex-usp-moat',
  'annex-roadmap-2027',
  'annex-roadmap-2028',
]

export const TOTAL_SLIDES = SLIDE_ORDER.length

export function useSlideNavigation() {
  const [currentIndex, setCurrentIndex] = useState(0)
  const [direction, setDirection] = useState(0)
  const [visitedSlides, setVisitedSlides] = useState<Set<number>>(new Set([0]))
  const [showOverview, setShowOverview] = useState(false)

  const currentSlide = SLIDE_ORDER[currentIndex]

  const goToSlide = useCallback((index: number) => {
    if (index < 0 || index >= TOTAL_SLIDES) return
    setDirection(index > currentIndex ? 1 : -1)
    setCurrentIndex(index)
    setVisitedSlides(prev => new Set([...prev, index]))
    setShowOverview(false)
  }, [currentIndex])

  const nextSlide = useCallback(() => {
    if (currentIndex < TOTAL_SLIDES - 1) {
      goToSlide(currentIndex + 1)
    }
  }, [currentIndex, goToSlide])

  const prevSlide = useCallback(() => {
    if (currentIndex > 0) {
      goToSlide(currentIndex - 1)
    }
  }, [currentIndex, goToSlide])

  const goToFirst = useCallback(() => goToSlide(0), [goToSlide])
  const goToLast = useCallback(() => goToSlide(TOTAL_SLIDES - 1), [goToSlide])

  const toggleOverview = useCallback(() => {
    setShowOverview(prev => !prev)
  }, [])

  return {
    currentIndex,
    currentSlide,
    direction,
    visitedSlides,
    showOverview,
    totalSlides: TOTAL_SLIDES,
    slideOrder: SLIDE_ORDER,
    goToSlide,
    nextSlide,
    prevSlide,
    goToFirst,
    goToLast,
    toggleOverview,
    setShowOverview,
    isFirst: currentIndex === 0,
    isLast: currentIndex === TOTAL_SLIDES - 1,
  }
}
