/**
 * Global keyboard shortcuts — Gmail/Vim tarzı 2-tuş kombinasyonları.
 *
 * Shortcuts:
 *   ?      → Yardım modal'ı aç (tüm shortcuts liste)
 *   g d    → Pano'ya git
 *   g a    → Hesaplara
 *   g e    → E-posta
 *   g s    → SSL
 *   g m    → MySQL/MariaDB
 *   g b    → Yedekler
 *   g f    → Firewall
 *   g l    → Loglar
 *   g t    → Destek talepleri
 *   /      → Sidebar arama odakla (Ctrl+K eşdeğeri)
 *   Esc    → Modal'ları kapat / Aramayı temizle
 */

import { router } from '@inertiajs/vue3'
import { ref } from 'vue'

const showHelp = ref(false)
let pendingPrefix = ''
let pendingTimer = null

function isInputFocused() {
    const el = document.activeElement
    if (!el) return false
    const tag = el.tagName?.toLowerCase()
    return tag === 'input' || tag === 'textarea' || tag === 'select' || el.isContentEditable
}

function navigate(name) {
    try {
        if (window.route) {
            router.visit(window.route(name))
        }
    } catch (e) {
        console.warn(`Route '${name}' not found`)
    }
}

const shortcuts = [
    { keys: ['?'], description: 'Yardım modal\'ı aç', section: 'Genel' },
    { keys: ['Ctrl/⌘ P'], description: 'Komut paleti (sayfa/aksiyon ara)', section: 'Genel' },
    { keys: ['g', 'd'], description: 'Pano\'ya git', section: 'Navigasyon', route: 'admin.dashboard' },
    { keys: ['g', 'a'], description: 'Hosting Hesapları', section: 'Navigasyon', route: 'admin.accounts.index' },
    { keys: ['g', 'p'], description: 'Paketler', section: 'Navigasyon', route: 'admin.packages.index' },
    { keys: ['g', 'b'], description: 'Yedekler', section: 'Navigasyon', route: 'admin.backups.dashboard' },
    { keys: ['g', 'f'], description: 'Firewall', section: 'Navigasyon', route: 'admin.firewall.index' },
    { keys: ['g', 's'], description: 'SSL Sertifikaları', section: 'Navigasyon', route: 'admin.ssl.index' },
    { keys: ['g', 'm'], description: 'MySQL/MariaDB', section: 'Navigasyon', route: 'admin.mysql.index' },
    { keys: ['g', 'l'], description: 'Sistem Logları', section: 'Navigasyon', route: 'admin.logs.index' },
    { keys: ['g', 'i'], description: 'Entegrasyonlar', section: 'Navigasyon', route: 'admin.integrations.index' },
    { keys: ['g', 'u'], description: 'Denetim Kaydı', section: 'Navigasyon', route: 'admin.audit.index' },
    { keys: ['Ctrl/⌘ K', '/'], description: 'Sidebar arama', section: 'Genel' },
    { keys: ['Esc'], description: 'Modal/Arama kapat', section: 'Genel' },
]

function handleKey(e) {
    if (isInputFocused()) {
        // Esc'le focus blur
        if (e.key === 'Escape') {
            document.activeElement.blur()
        }
        return
    }

    // ? = yardım
    if (e.key === '?') {
        e.preventDefault()
        showHelp.value = true
        return
    }

    // / = sidebar arama
    if (e.key === '/') {
        e.preventDefault()
        const sidebarInput = document.querySelector('aside input[placeholder*="ara"]')
        sidebarInput?.focus()
        return
    }

    // Esc = modal kapat
    if (e.key === 'Escape') {
        showHelp.value = false
        pendingPrefix = ''
        return
    }

    // İki-tuş kombinasyonu (g+X)
    if (pendingPrefix === 'g') {
        const combo = shortcuts.find(s => s.keys.length === 2 && s.keys[0] === 'g' && s.keys[1] === e.key.toLowerCase())
        if (combo?.route) {
            e.preventDefault()
            navigate(combo.route)
        }
        pendingPrefix = ''
        clearTimeout(pendingTimer)
        return
    }

    // İlk tuş 'g' → bekleme moduna geç (1 saniye)
    if (e.key.toLowerCase() === 'g') {
        e.preventDefault()
        pendingPrefix = 'g'
        clearTimeout(pendingTimer)
        pendingTimer = setTimeout(() => { pendingPrefix = '' }, 1000)
    }
}

export function useKeyboardShortcuts() {
    return {
        showHelp,
        shortcuts,
        handleKey,
        install() {
            window.addEventListener('keydown', handleKey)
            return () => window.removeEventListener('keydown', handleKey)
        },
    }
}
