/**
 * 自动检测用户活动并在超时后退出登录
 * 适用于MES工位长时间无操作场景
 */

export function startAutoLogout(options = {}) {
  // 默认配置
  const config = {
    timeout: options.timeout || 3 * 60 * 1000, // 默认3分钟超时
    checkInterval: options.checkInterval || 30 * 1000, // 默认30秒检查一次
    onLogout: options.onLogout || (() => {}), // 退出时的回调函数
    warningMessage: options.warningMessage || '操作超时，已自动退出登录',
    debug: options.debug || false // 是否开启调试日志
  }

  // 用户最后活动时间
  let lastActivityTime = Date.now()
  
  // 定时器
  let checkTimer = null
  
  // 日志函数
  const log = (...args) => {
    if (config.debug) {
      console.log('[AutoLogout]', ...args)
    }
  }

  // 更新活动时间的函数
  const updateActivity = () => {
    lastActivityTime = Date.now()
    log('用户活动，更新时间:', new Date(lastActivityTime).toLocaleTimeString())
  }

  // 监听用户活动事件
  const events = ['mousemove', 'keypress', 'click', 'touchstart', 'scroll', 'keydown']
  events.forEach(event => {
    document.addEventListener(event, updateActivity, { passive: true })
  })

  log('自动退出功能已启动，超时时间:', config.timeout / 1000, '秒')

  // 检查是否超时的函数
  const checkTimeout = () => {
    const now = Date.now()
    const idleTime = now - lastActivityTime
    const isTimeout = idleTime > config.timeout

    log(`检查超时 - 空闲时间: ${Math.floor(idleTime / 1000)}秒, 是否超时: ${isTimeout}`)

    if (isTimeout) {
      log('检测到超时，开始退出登录')
      
      // 清除定时器
      if (checkTimer) {
        clearInterval(checkTimer)
      }

      // 移除事件监听
      events.forEach(event => {
        document.removeEventListener(event, updateActivity)
      })

      // 执行退出回调
      config.onLogout(config.warningMessage)
    }
  }

  // 启动定时检查
  checkTimer = setInterval(checkTimeout, config.checkInterval)

  // 返回控制对象，包含停止函数和手动更新活动时间的方法
  return {
    stop: () => {
      log('停止自动退出功能')

      // 清除定时器
      if (checkTimer) {
        clearInterval(checkTimer)
        checkTimer = null
      }

      // 移除事件监听
      events.forEach(event => {
        document.removeEventListener(event, updateActivity)
      })
    },
    updateActivity: () => {
      log('手动更新用户活动时间')
      updateActivity()
    }
  }
}