"use client";

import { useEffect, useState } from "react";
import { shouldShowSplash, markSplashShown } from "../utils/splashHelpers";

const MIN_DURATION = 2600; // ms

export function useSplashFlow() {
  // Start visible=true on SSR so the splash is in the initial HTML,
  // preventing the flash of page content before JS hydrates.
  const [visible, setVisible] = useState(true);
  const [exiting, setExiting] = useState(false);
  const [instant, setInstant] = useState(false); // skip animation on revisit

  useEffect(() => {
    if (!shouldShowSplash()) {
      // Already shown this session — hide instantly (no animation, imperceptible)
      setInstant(true);
      // One microtask delay so React can commit the instant class before unmounting
      const t = setTimeout(() => setVisible(false), 0);
      return () => clearTimeout(t);
    }

    markSplashShown();

    const dismiss = setTimeout(() => {
      setExiting(true);
      const remove = setTimeout(() => setVisible(false), 700);
      return () => clearTimeout(remove);
    }, MIN_DURATION);

    return () => clearTimeout(dismiss);
  }, []);

  return { visible, exiting, instant };
}
