export default {
  install(Vue) {
    Vue.prototype.$scrollTo = function(el, behavior = 'smooth', retryCount = 0) {
      if (!el) {
        console.warn('scrollTo: 元素参数为空')
        return 
      }
      
      const maxRetries = 3
      const retryDelay = 100 // 100ms
      
      let targetEL = typeof el === 'string' ? this.$refs[el] : el
      
      console.log(`scrollTo called with: ${el} (尝试次数: ${retryCount + 1})`)
      console.log('原始targetEL:', targetEL)
      
      // 如果targetEL为undefined且还有重试次数，则延迟重试
      if (!targetEL && retryCount < maxRetries) {
        console.log(`元素未找到，${retryDelay}ms后重试...`)
        setTimeout(() => {
          this.$scrollTo(el, behavior, retryCount + 1)
        }, retryDelay)
        return
      }
      
      // 如果重试次数用完仍未找到元素，输出详细信息
      if (!targetEL) {
        console.error(`scrollTo: 经过${maxRetries + 1}次尝试仍未找到元素 "${el}"`)
        console.log('当前可用的refs:', Object.keys(this.$refs))
        return
      }
      
      // 如果targetEL是数组，取第一个元素
      if (Array.isArray(targetEL) && targetEL.length > 0) {
        targetEL = targetEL[0]
        console.log('检测到数组，取第一个元素:', targetEL)
      } else if (Array.isArray(targetEL) && targetEL.length === 0) {
        console.error('scrollTo: 找到的是空数组')
        return
      }
      
      if (targetEL) {
        // #ifdef H5
        console.log('进h5环境的滚动插件了');
        console.log('targetEL类型:', typeof targetEL);
        console.log('targetEL是否有$el属性:', !!targetEL.$el);
        console.log('targetEL是否有scrollIntoView方法:', !!targetEL.scrollIntoView);
        
        try {
          // H5环境下使用原生的scrollIntoView方法
          if (targetEL.$el) {
            // 如果是Vue组件（uni-app的view等组件），获取其DOM元素
            console.log('检测到uni-app Vue组件，使用$el获取DOM元素');
            console.log('DOM元素:', targetEL.$el);
            
            targetEL.$el.scrollIntoView({
              behavior: behavior,
              block: 'start',
              inline: 'nearest'
            })
            console.log('✅ 滚动成功')
          } else if (targetEL.scrollIntoView) {
            console.log('检测到原生DOM元素');
            // 如果是原生DOM元素
            targetEL.scrollIntoView({
              behavior: behavior,
              block: 'start',
              inline: 'nearest'
            })
            console.log('✅ 滚动成功')
          } else {
            console.log('无法识别的元素类型，尝试其他方法');
            // 如果都不是，可能需要其他处理方式
          }
        } catch (error) {
          console.error('scrollTo 执行失败:', error)
        }
        // #endif
        
        // #ifndef H5
        // 非H5环境（小程序等）使用uni.pageScrollTo
        const query = uni.createSelectorQuery().in(this)
        query.select(`[ref="${el}"]`).boundingClientRect((data) => {
          console.log('element position:', data)
          if (data) {
            uni.pageScrollTo({
              scrollTop: data.top,
              duration: behavior === 'smooth' ? 300 : 0
            })
            console.log('✅ 滚动成功')
          } else {
            console.error('scrollTo: 未找到元素位置信息')
          }
        }).exec()
        // #endif
      }
    }
  }
}

// 使用方式
// 在 main.js 中引入：Vue.use(require('./plugins/scrollTo'))
// 然后在组件中：this.$scrollTo('targetRef')