import { Typography, Chip, Tooltip } from '@mui/material' import { AccessTime } from '@mui/icons-material' import { useMemo } from 'react' import { useQuery } from '@tanstack/react-query' import { settingsApi } from '../api/settings' import { formatDate } from '../utils/formatters' interface DataFreshnessProps { timestamp: string | Date | null | undefined refreshInterval?: number } export default function DataFreshness({ timestamp, refreshInterval = 5000 }: DataFreshnessProps) { const { data: generalSettings } = useQuery({ queryKey: ['general-settings'], queryFn: settingsApi.getGeneralSettings, }) const freshness = useMemo(() => { if (!timestamp) return { status: 'unknown', text: 'No data', color: 'default' as const } const lastUpdate = new Date(timestamp) const now = new Date() const ageMs = now.getTime() - lastUpdate.getTime() const ageSeconds = Math.floor(ageMs / 1000) if (ageSeconds < refreshInterval / 1000) { return { status: 'fresh', text: 'Just now', color: 'success' as const } } else if (ageSeconds < 60) { return { status: 'fresh', text: `${ageSeconds}s ago`, color: 'success' as const } } else if (ageSeconds < 300) { const minutes = Math.floor(ageSeconds / 60) return { status: 'stale', text: `${minutes}m ago`, color: 'warning' as const } } else { const minutes = Math.floor(ageSeconds / 60) return { status: 'outdated', text: `${minutes}m ago`, color: 'error' as const } } }, [timestamp, refreshInterval]) if (!timestamp) { return ( } label="No data" size="small" color="default" variant="outlined" /> ) } return ( } label={freshness.text} size="small" color={freshness.color} variant="outlined" /> ) }