'use client'

import { useEffect, useCallback, useRef } from 'react'
import { KEYBOARD_SHORTCUTS } from '@/lib/companion/constants'

interface UseKeyboardShortcutsOptions {
  onPauseResume?: () => void
  onExtend?: () => void
  onNextPhase?: () => void
  onCloseModal?: () => void
  onShowHelp?: () => void
  enabled?: boolean
}

export function useKeyboardShortcuts({
  onPauseResume,
  onExtend,
  onNextPhase,
  onCloseModal,
  onShowHelp,
  enabled = true,
}: UseKeyboardShortcutsOptions) {
  // Track if we're in an input field
  const isInputFocused = useRef(false)

  const handleKeyDown = useCallback(
    (event: KeyboardEvent) => {
      if (!enabled) return

      // Don't trigger shortcuts when typing in inputs
      const target = event.target as HTMLElement
      const isInput =
        target.tagName === 'INPUT' ||
        target.tagName === 'TEXTAREA' ||
        target.tagName === 'SELECT' ||
        target.isContentEditable

      if (isInput) {
        isInputFocused.current = true
        // Only allow Escape in inputs
        if (event.key !== 'Escape') return
      } else {
        isInputFocused.current = false
      }

      // Handle shortcuts
      switch (event.key) {
        case KEYBOARD_SHORTCUTS.PAUSE_RESUME:
          if (!isInput) {
            event.preventDefault()
            onPauseResume?.()
          }
          break

        case KEYBOARD_SHORTCUTS.EXTEND_5MIN:
        case KEYBOARD_SHORTCUTS.EXTEND_5MIN.toUpperCase():
          if (!isInput) {
            event.preventDefault()
            onExtend?.()
          }
          break

        case KEYBOARD_SHORTCUTS.NEXT_PHASE:
        case KEYBOARD_SHORTCUTS.NEXT_PHASE.toUpperCase():
          if (!isInput) {
            event.preventDefault()
            onNextPhase?.()
          }
          break

        case KEYBOARD_SHORTCUTS.CLOSE_MODAL:
          event.preventDefault()
          onCloseModal?.()
          break

        case KEYBOARD_SHORTCUTS.SHOW_HELP:
          if (!isInput) {
            event.preventDefault()
            onShowHelp?.()
          }
          break
      }
    },
    [enabled, onPauseResume, onExtend, onNextPhase, onCloseModal, onShowHelp]
  )

  useEffect(() => {
    if (!enabled) return

    document.addEventListener('keydown', handleKeyDown)
    return () => document.removeEventListener('keydown', handleKeyDown)
  }, [enabled, handleKeyDown])

  return {
    isInputFocused: isInputFocused.current,
  }
}

/**
 * Hook to display keyboard shortcut hints
 */
export function useKeyboardShortcutHints(show: boolean) {
  const shortcuts = [
    { key: 'Leertaste', action: 'Pause/Fortsetzen', code: 'space' },
    { key: 'E', action: '+5 Minuten', code: 'e' },
    { key: 'N', action: 'Naechste Phase', code: 'n' },
    { key: 'Esc', action: 'Modal schliessen', code: 'escape' },
  ]

  if (!show) return null

  return shortcuts
}
