// src/client/shared/lib/useMouseFollower.ts
// Умный трекер мыши с расчетом безопасных координат

import { ref, computed } from 'vue';

// Глобальные реактивные переменные (Shared State)
const mouseX = ref(0);
const mouseY = ref(0);
const tooltipWidth = ref(0);
const tooltipHeight = ref(0);
const forceInvert = ref(false); // Для принудительной инверсии (Floating Buttons)

let isListenerSetup = false;

/**
 * Умный трекер мыши с расчетом безопасных координат
 */
export function useMouseFollower() {
  // Настройка слушателя только один раз
  if (!isListenerSetup && typeof window !== 'undefined') {
    const handleMouseMove = (event: MouseEvent) => {
      mouseX.value = event.clientX;
      mouseY.value = event.clientY;
    };

    window.addEventListener('mousemove', handleMouseMove, { passive: true });
    isListenerSetup = true;
  }

  const displayCoords = computed(() => {
    const gap = 15;
    // По умолчанию: растем вправо и вниз
    let x = mouseX.value + gap;
    let y = mouseY.value + gap;

    // ИНВЕРСИЯ: срабатывает ТОЛЬКО если forceInvert === true
    // (для кнопок в нижнем правом углу)
    if (forceInvert.value) {
      x = mouseX.value - tooltipWidth.value - gap;
      y = mouseY.value - tooltipHeight.value - gap;
    }

    return { x, y };
  });

  return {
    mouseX,
    mouseY,
    displayCoords,
    // Методы управления
    updateTooltipSize: (w: number, h: number) => {
      tooltipWidth.value = w;
      tooltipHeight.value = h;
    },
    setInvertedMode: (val: boolean) => {
      forceInvert.value = val;
    }
  };
}
