/**
 * 快捷键插件
 *
 * 功能：
 * 1. 提供全局快捷键注册/注销方法
 * 2. 提供 enable() 方法供主项目显式启用
 *
 * 使用方式：
 * import { shortcutPlugin } from '@vue2-client/base-client/plugins/shortcutPlugin'
 * Vue.use(shortcutPlugin)
 *
 * 注意：默认不启用，需要主项目调用 Vue.prototype.$shortcut.enable() 启用
 */

import Vue from 'vue'
import { shortcutManager } from '@vue2-client/base-client/utils/shortcutManager'

// 开发环境日志工具
const log = (env => {
  if (env !== 'development') {
    return () => {}
  }
  return (tag, ...args) => console.log(`[ShortcutPlugin] [${tag}]`, ...args)
})(process.env.NODE_ENV)

export const shortcutPlugin = {
  install() {
    log('info', '🔧 开始安装插件（默认不启用）')

    // 不再自动初始化，由主项目显式调用 enable()
    // shortcutManager.init()  // 已移除

    // 确保 Vue.prototype.$shortcut 存在
    if (!Vue.prototype.$shortcut) {
      Vue.prototype.$shortcut = {
        /**
         * 启用快捷键系统（由主项目调用）
         * @param {Object} options 配置选项
         * @param {boolean} options.autoInit 是否自动初始化，默认为 true
         */
        enable(options) {
          shortcutManager.enable(options)
          log('info', '✅ 快捷键系统已启用，如需调试请调用 $shortcut.debug()')
        },

        /**
         * 禁用快捷键系统
         */
        disable() {
          shortcutManager.disable()
        },

        /**
         * 检查是否已启用
         */
        get isEnabled() {
          return shortcutManager.isEnabled
        },

        /**
         * 注册全局快捷键（不限定作用域）
         */
        register(key, action, context) {
          shortcutManager.register({
            key,
            action,
            scope: 'global',
            context,
            isActive: true
          })
        },

        /**
         * 注销全局快捷键
         */
        unregister(key) {
          shortcutManager.unregister(key, 'global')
        },

        /**
         * 清空所有快捷键（慎用）
         */
        clearAll() {
          for (const key of shortcutManager.shortcuts.keys()) {
            shortcutManager.unregister(key, 'global')
          }
        },

        /**
         * 获取当前作用域
         */
        getCurrentScope() {
          return shortcutManager.getCurrentScope()
        },

        /**
         * 进入作用域
         */
        pushScope(scopeId) {
          shortcutManager.pushScope(scopeId)
        },

        /**
         * 离开作用域
         */
        popScope() {
          shortcutManager.popScope()
        },

        /**
         * 列出所有快捷键（调试用）
         */
        listAll() {
          return shortcutManager.listAll()
        },

        /**
         * 获取快捷键信息
         */
        getInfo(key) {
          return shortcutManager.getShortcutInfo(key)
        },

        /**
         * 设置作用域激活状态
         */
        setScopeActive(scopeId, active) {
          shortcutManager.setScopeActive(scopeId, active)
        },

        /**
         * 生成路由作用域
         */
        generateRouteScope(path) {
          return shortcutManager.generateRouteScope(path)
        },

        /**
         * 生成Tab作用域
         */
        generateTabScope(path, tabKey) {
          return shortcutManager.generateTabScope(path, tabKey)
        },

        /**
         * 调试：打印所有快捷键状态
         */
        debug() {
          shortcutManager.debug()
        },

        // ========== 清理方法 ==========

        /**
         * 清理非活跃的作用域
         *
         * 移除已停用且不再被快照引用的作用域，防止内存累积
         *
         * @param {number} [maxInactiveAge=300000] 最大非活跃时间（毫秒），默认 5 分钟
         * @returns {number} 清理的作用域数量
         */
        cleanupInactiveScopes(maxInactiveAge) {
          return shortcutManager.cleanupInactiveScopes(maxInactiveAge)
        },

        /**
         * 清理旧路由的状态快照
         *
         * @param {number} [keepCount=10] 保留的快照数量
         * @returns {number} 清理的快照数量
         */
        cleanupOldRouteSnapshots(keepCount) {
          return shortcutManager.cleanupOldRouteSnapshots(keepCount)
        },

        /**
         * 完整清理（便捷方法）
         *
         * @param {Object} options 清理选项
         * @param {number} [options.maxInactiveAge] 最大非活跃时间（毫秒）
         * @param {number} [options.keepSnapshotCount] 保留的快照数量
         * @returns {Object} 清理结果 { inactiveScopes: number, oldSnapshots: number }
         */
        cleanup(options) {
          return shortcutManager.cleanup(options)
        },

        /**
         * 获取统计信息
         *
         * @returns {Object} 统计信息
         */
        getStats() {
          return shortcutManager.getStats()
        }
      }
    }

    log('info', '✅ 插件安装完成，调用 $shortcut.enable() 启用快捷键功能')
  }
}

export default shortcutPlugin
