"use client";

import { useCallback, useEffect, useState } from "react";

interface Options {
  count: number;
  intervalMs: number;
}

/**
 * Index state for an auto-advancing slider.
 * The timer restarts after every index change, so manual navigation resets it.
 */
export function useAutoSlider({ count, intervalMs }: Options) {
  const [index, setIndex] = useState(0);
  const [paused, setPaused] = useState(false);

  const goTo = useCallback((next: number) => setIndex((next + count) % count), [count]);
  const next = useCallback(() => setIndex((i) => (i + 1) % count), [count]);
  const prev = useCallback(() => setIndex((i) => (i - 1 + count) % count), [count]);
  const pause = useCallback(() => setPaused(true), []);
  const resume = useCallback(() => setPaused(false), []);

  useEffect(() => {
    if (paused) return;
    const timer = setTimeout(next, intervalMs);
    return () => clearTimeout(timer);
  }, [index, paused, intervalMs, next]);

  return { index, goTo, next, prev, pause, resume };
}
