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<Session[]> {
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<SessionsResponse>(url)
return data.sessions.map(adaptSession)
},
enabled: options?.enabled,
staleTime: options?.staleTime,
})
}