"use client";

import { useCallback, useEffect, useState } from "react";
import { fetchFleet, resetFleet, simulateFleetEvent } from "@/lib/fleet/client";
import type { FleetSnapshot, SimulateEventPayload } from "@/lib/fleet/types";

export function useFleet(pollMs?: number) {
  const [snapshot, setSnapshot] = useState<FleetSnapshot | null>(null);
  const [error, setError] = useState<string | null>(null);
  const [loading, setLoading] = useState(true);

  const reload = useCallback(async () => {
    try {
      const data = await fetchFleet();
      setSnapshot(data);
      setError(null);
    } catch (e) {
      setError(e instanceof Error ? e.message : "Laden fehlgeschlagen");
    } finally {
      setLoading(false);
    }
  }, []);

  useEffect(() => {
    void reload();
  }, [reload]);

  useEffect(() => {
    if (!pollMs) return;
    const id = setInterval(() => void reload(), pollMs);
    return () => clearInterval(id);
  }, [pollMs, reload]);

  const simulate = useCallback(
    async (payload?: SimulateEventPayload) => {
      await simulateFleetEvent(payload);
      await reload();
    },
    [reload],
  );

  const reset = useCallback(async () => {
    const data = await resetFleet();
    setSnapshot(data);
  }, []);

  return { snapshot, error, loading, reload, simulate, reset };
}
