import { skippedSection } from '../format.ts' import { fetchHealth } from '../open-meteo.ts' import type { BriefingInput, BriefingSection, Severity } from '../types.ts' function severityForAqi(aqi: number | null): Severity { if (aqi === null) return 'info' if (aqi >= 150) return 'critical' if (aqi >= 100) return 'warning' if (aqi >= 50) return 'notice' return 'good' } export async function healthSection(input: BriefingInput): Promise { const location = (typeof input.health?.location === 'string' && input.health.location.trim()) || (typeof input.location === 'string' && input.location.trim()) || '' if (!location) { return skippedSection( 'health', 'Pass location or health.location. Health uses Open-Meteo air quality (no OAuth).', ) } const health = await fetchHealth(location) const aqi = health.usAqi return { id: 'health', title: 'Health', status: aqi !== null && aqi >= 100 ? 'warning' : 'ok', summary: aqi === null ? `${health.place} · air quality unavailable` : `${health.place} · US AQI ${aqi} (${health.category})`, items: [ { title: aqi === null ? 'Air quality unavailable' : `US AQI ${aqi} · ${health.category}`, detail: `PM2.5 ${health.pm25 ?? '—'}, PM10 ${health.pm10 ?? '—'}. ${health.attribution}`, label: 'air', severity: severityForAqi(aqi), }, ], } }