export const dynamic = 'force-dynamic'
export const runtime = 'nodejs'

import { NextResponse } from 'next/server'
import { isBearerAuthorized, unauthorized, internalHeaders } from '@/lib/voice-tools'

// Hardcoded for now — same as TransportWidget. Future: read from /data/tablet-config.json.
const STOPS: Record<string, { id: string; name: string; direction: string }> = {
  to_center:   { id: '16226', name: 'Ул. Антонова-Овсеенко', direction: 'в центр (к Новочеркасской)' },
  from_center: { id: '16354', name: 'Ул. Антонова-Овсеенко', direction: 'от центра (к Большевиков)' },
}

export async function GET(req: Request) {
  if (!isBearerAuthorized(req)) return unauthorized()

  const { searchParams } = new URL(req.url)
  const dirRaw = (searchParams.get('direction') || 'all').toLowerCase()
  const routesRaw = searchParams.get('routes') || '' // comma-separated

  const dirsToQuery: { id: string; name: string; direction: string }[] =
    dirRaw === 'to_center' ? [STOPS.to_center] :
    dirRaw === 'from_center' ? [STOPS.from_center] :
    [STOPS.to_center, STOPS.from_center]

  const routeFilter = new Set(
    routesRaw.split(',').map(r => r.trim()).filter(Boolean)
  )

  const baseUrl = `http://localhost:${process.env.PORT || '3000'}`

  const results = await Promise.all(
    dirsToQuery.map(async (d) => {
      const r = await fetch(`${baseUrl}/api/transport?stopId=${d.id}`, {
        cache: 'no-store',
        headers: internalHeaders(),
      }).catch(() => null)
      if (!r || !r.ok) return { direction: d.direction, stop_id: d.id, arrivals: [] }
      const j = await r.json()
      let arrivals = (j.arrivals || []) as Array<{ route: string; minutes: number; wheelchair?: boolean }>
      if (routeFilter.size > 0) {
        arrivals = arrivals.filter(a => routeFilter.has(a.route))
      }
      arrivals = arrivals.sort((a, b) => a.minutes - b.minutes).slice(0, 5)
      return {
        direction: d.direction,
        stop_id: d.id,
        stop_name: d.name,
        arrivals: arrivals.map(a => ({
          route: a.route,
          minutes: a.minutes,
          wheelchair: !!a.wheelchair,
        })),
      }
    })
  )

  return NextResponse.json({ results })
}
