// lib/features/eta/eta_model.dart
// Modelo de respuesta del endpoint GET /eta?address_id=X
// El backend NUNCA devuelve coordenadas; solo texto y status.
 
enum RouteStatus {
  pendiente,
  enRuta,
  completada,
  diferida,
  reasignada,
}
 
RouteStatus routeStatusFromString(String s) {
  switch (s) {
    case 'en_ruta':
      return RouteStatus.enRuta;
    case 'completada':
      return RouteStatus.completada;
    case 'diferida':
      return RouteStatus.diferida;
    case 'reasignada':
      return RouteStatus.reasignada;
    default:
      return RouteStatus.pendiente;
  }
}
 
class EtaResponse {
  /// Texto accionable que muestra el ciudadano.
  /// Ejemplos: "Llega en aproximadamente 15 minutos"
  ///           "Servicio del día finalizado"
  final String mensaje;
 
  /// Estado de la ruta para mostrar el badge correcto.
  final RouteStatus status;
 
  /// Ventana horaria opcional, ej. "7:20–7:35 p.m."
  /// Solo presente cuando positionId == 4 (TRUCK_PROXIMITY).
  final String? ventanaHoraria;
 
  const EtaResponse({
    required this.mensaje,
    required this.status,
    this.ventanaHoraria,
  });
 
  factory EtaResponse.fromJson(Map<String, dynamic> json) {
    return EtaResponse(
      mensaje: json['mensaje'] as String,
      status: routeStatusFromString(json['status'] as String),
      ventanaHoraria: json['ventana_horaria'] as String?,
    );
  }
 
  /// Estado de progreso local (0-3) mapeado al positionId del backend.
  /// Útil para la barra de 4 pasos en la UI.
  int get stepIndex {
    switch (status) {
      case RouteStatus.pendiente:
        return 0;
      case RouteStatus.enRuta:
        return 1;
      case RouteStatus.completada:
        return 3;
      default:
        return 2;
    }
  }
 
  bool get isCompleted => status == RouteStatus.completada;
  bool get isNearby =>
      ventanaHoraria != null && status == RouteStatus.enRuta;
}