import { useQuery } from '@tanstack/react-query' import type { UseQueryResult } from '@tanstack/react-query' import { apiFetch } from '../../api/client' import { adaptSession } from '../../api/adapters' import type { Session, SessionDTO, Tool, Host } from '../../api/adapters' export interface HomeFilters { since?: '1d' | '7d' | '30d' | '90d' | 'all' tool?: Tool host?: Host cwd?: string } interface SessionsResponse { sessions: SessionDTO[] limit: number offset: number } function sinceToEpoch(since: string): number { const now = Math.floor(Date.now() / 1000) switch (since) { case '1d': return now - 1 * 86400 case '7d': return now - 7 * 86400 case '30d': return now - 30 * 86400 case '90d': return now - 90 * 86400 default: return 0 } } export interface UseSessionsOptions { enabled?: boolean staleTime?: number } export function useSessions(filters: HomeFilters, options?: UseSessionsOptions): UseQueryResult { const since = filters.since ?? '30d' return useQuery({ queryKey: ['sessions', filters], queryFn: async () => { const params = new URLSearchParams() if (since !== 'all') { params.set('since', String(sinceToEpoch(since))) } if (filters.tool) { params.set('tool', filters.tool) } if (filters.host) { params.set('host', filters.host) } if (filters.cwd) { params.set('cwd', filters.cwd) } const qs = params.toString() const url = `/api/v1/sessions${qs ? `?${qs}` : ''}` const data = await apiFetch(url) return data.sessions.map(adaptSession) }, enabled: options?.enabled, staleTime: options?.staleTime, }) }