import coloniasData from '../data/colonias-rutas.json'
import notifData    from '../data/notificaciones.json'

export async function fetchAllData() {
  const res   = await fetch('http://localhost:8000/rutas')
  const rutas = await res.json()

  const rutasFormateadas = rutas.map(r => ({
    routeId:           r.routeId,
    name:              r.name,
    truckId:           r.truckId,
    status:            r.status,
    currentPositionId: r.posicionActual,
    positions:         Array.from({ length: r.totalNodos }, (_, i) => ({
      positionId: i + 1,
    })),
  }))

  return {
    rutas:          rutasFormateadas,
    colonias:       coloniasData,
    notificaciones: notifData,
  }
}

export function calcularETA(colonia, { rutas, colonias, notificaciones }) {
  const coloniaInfo = colonias.find(
    c => c.colonia.toLowerCase() === colonia.toLowerCase()
  )
  if (!coloniaInfo) return { error: 'Colonia no encontrada' }

  const ruta = rutas.find(r => r.routeId === coloniaInfo.routeId)
  if (!ruta) return { error: 'Ruta no disponible' }

  // Usa el posicionActual del simulador directamente
  const posIdActual = ruta.currentPositionId ?? 1
  const totalNodos  = ruta.positions.length

  // Calcula ETA basado en nodos restantes
  // Cada nodo tarda ~90 segundos en el simulador
  const nodosRestantes = Math.max(0, totalNodos - posIdActual)
  const etaMinutos     = nodosRestantes * 10  // 10 seg por nodo en demo = ~1 min por nodo
  const margen          = 3

  const ahora = new Date()
  const desde = new Date(ahora.getTime() + Math.max(0, etaMinutos - margen) * 60000)
  const hasta = new Date(ahora.getTime() + (etaMinutos + margen) * 60000)
  const fmt   = d => d.toLocaleTimeString('es-MX', { hour: '2-digit', minute: '2-digit' })

  let status = 'en_ruta'
  if (posIdActual >= 8)      status = 'finalizado'
  else if (posIdActual >= 4) status = 'cerca'
  else if (posIdActual <= 1) status = 'iniciando'

  let notificacion = null
  if (posIdActual <= 1) {
    notificacion = notificaciones.find(n => n.triggerEvent === 'ROUTE_START')
  } else if (posIdActual === 4) {
    notificacion = notificaciones.find(n => n.triggerEvent === 'TRUCK_PROXIMITY')
  } else if (posIdActual >= 8) {
    notificacion = notificaciones.find(n => n.triggerEvent === 'ROUTE_COMPLETED')
  }

  return {
    routeId:        ruta.routeId,
    routeName:      ruta.name,
    colonia:        coloniaInfo.colonia,
    horarioOficial: coloniaInfo.horarioEstimado,
    status,
    truckStatus:    ruta.status,
    posicionActual: posIdActual,
    totalNodos,
    progresoPct: Math.round((posIdActual / 8) * 100),
    etaMinutos,
    etaVentana: { desde: fmt(desde), hasta: fmt(hasta) },
    notificacion:   notificacion?.pushPayload ?? null,
  }
}