import { useQuery } from '@tanstack/react-query'
import type { UseQueryResult } from '@tanstack/react-query'
import { apiFetch } from '../../api/client'
import { adaptProject } from '../../api/adapters'
import type { Project, ProjectDTO } from '../../api/adapters'
export interface ProjectFilters {
since?: '7d' | '30d' | '90d' | 'all'
}
interface ProjectsResponse {
projects: ProjectDTO[]
limit: number
offset: number
}
function sinceToEpoch(since: string): number {
const now = Math.floor(Date.now() / 1000)
switch (since) {
case '7d': return now - 7 * 86400
case '30d': return now - 30 * 86400
case '90d': return now - 90 * 86400
default: return 0
}
}
export interface UseProjectsOptions {
enabled?: boolean
staleTime?: number
}
export function useProjects(filters: ProjectFilters, options?: UseProjectsOptions): UseQueryResult<Project[]> {
const since = filters.since ?? '30d'
return useQuery({
queryKey: ['projects', filters],
queryFn: async () => {
const params = new URLSearchParams()
if (since !== 'all') {
params.set('since', String(sinceToEpoch(since)))
}
const qs = params.toString()
const url = `/api/v1/projects${qs ? `?${qs}` : ''}`
const data = await apiFetch<ProjectsResponse>(url)
return data.projects.map(adaptProject)
},
enabled: options?.enabled,
staleTime: options?.staleTime,
})
}