import { ref } from 'vue'

/**
 * Composable для автообновления данных
 * 
 * @param {string} key - ключ из REFRESH_INTERVALS (cards, comments, invites)
 * @param {Function} callback - функция для вызова при каждом обновлении
 * 
 * @example
 * const { start, stop } = useAutoRefresh('cards', async () => {
 *   await fetchCards()
 * })
 * 
 * onMounted(() => start())
 * onUnmounted(() => stop())
 */
export function useAutoRefresh(key, callback) {
  let timer = null
  const isActive = ref(false)
  
  // Получаем интервал из конфига (в секундах), конвертируем в мс
  const getInterval = () => {
    const seconds = window.APP_CONFIG?.REFRESH_INTERVALS?.[key] ?? 30
    return seconds * 1000
  }
  
  const start = () => {
    stop() // Очищаем предыдущий если был
    
    const interval = getInterval()
    
    // 0 = отключено
    if (interval <= 0) {
      return
    }
    
    isActive.value = true
    timer = setInterval(async () => {
      try {
        await callback()
      } catch (e) {
        console.error(`[AutoRefresh:${key}] Error:`, e)
      }
    }, interval)
  }
  
  const stop = () => {
    if (timer) {
      clearInterval(timer)
      timer = null
    }
    isActive.value = false
  }
  
  return {
    start,
    stop,
    isActive
  }
}
