import { useState, useEffect, useCallback, useRef } from 'react';
import { authenticatedFetch } from '../utils/api';
import type { TokenBucket } from './useRouterSettings';
export type CCRSessionStats = {
sessionId: string;
total: TokenBucket;
byScenario: Record<string, TokenBucket>;
byTier: Record<string, TokenBucket>;
firstSeenAt: string;
lastActiveAt: string;
};
const POLL_INTERVAL_MS = 15_000;
export function useCCRSessionStats(sessionId: string | null | undefined) {
const [stats, setStats] = useState<CCRSessionStats | null>(null);
const [loading, setLoading] = useState(false);
const intervalRef = useRef<ReturnType<typeof setInterval> | null>(null);
const hasFetchedRef = useRef(false);
const fetchStats = useCallback(async () => {
if (!sessionId) return;
const isInitial = !hasFetchedRef.current;
if (isInitial) setLoading(true);
try {
const res = await authenticatedFetch(`/api/ccr/stats/sessions/${sessionId}`);
if (res.ok) {
setStats(await res.json());
} else {
setStats(null);
}
} catch {
setStats(null);
} finally {
hasFetchedRef.current = true;
if (isInitial) setLoading(false);
}
}, [sessionId]);
useEffect(() => {
fetchStats();
intervalRef.current = setInterval(fetchStats, POLL_INTERVAL_MS);
return () => {
if (intervalRef.current) clearInterval(intervalRef.current);
};
}, [fetchStats]);
return { stats, loading, refresh: fetchStats };
}