'use client'

import { useState, useCallback } from 'react'
import { SlideId } from '../types'
import { SLIDE_ORDER, TOTAL_SLIDES } from '../slide-order'

// Re-export for backwards compatibility
export { SLIDE_ORDER, TOTAL_SLIDES }

export function useSlideNavigation(slideOrder: SlideId[] = SLIDE_ORDER) {
  const total = slideOrder.length
  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 = slideOrder[currentIndex]

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

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

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

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

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

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