import type { StateResponse } from './collector-types'
import { fetchCollectorState } from './collector-client'
import { CI_DELIVERY_PANEL_ID, parseCiDeliveryData, type CiDeliveryData } from './ci-delivery-data'
import { panelFreshness } from './panel-freshness'

export async function fetchCiDeliveryData(
  fetchState: () => Promise<StateResponse> = fetchCollectorState,
  now?: number,
): Promise<CiDeliveryData> {
  const state = await fetchState()
  const panel = state.panels.find((candidate) => candidate.id === CI_DELIVERY_PANEL_ID)
  const adapter = state.adapters.find((candidate) => candidate.id === CI_DELIVERY_PANEL_ID)
  const freshness = panelFreshness(panel, adapter, now)
  return parseCiDeliveryData(panel?.data, freshness === undefined ? 'unknown' : freshness.stale ? 'stale' : 'fresh')
}
