// lib/features/routes/presentation/providers/routes_provider.dart import 'package:flutter_riverpod/flutter_riverpod.dart'; import '../../data/repositories/routes_repository.dart'; import '../../domain/entities/route_entities.dart'; import '../../domain/entities/haversine.dart'; // ── Repositorio singleton ───────────────────────────────────────────── final routesRepositoryProvider = Provider( (ref) => RoutesRepository(), ); // ── Todas las rutas ─────────────────────────────────────────────────── final allRoutesProvider = FutureProvider>((ref) { return ref.watch(routesRepositoryProvider).obtenerRutas(); }); // ── Ruta por ID ─────────────────────────────────────────────────────── final routeByIdProvider = FutureProvider.family((ref, routeId) { return ref.watch(routesRepositoryProvider).obtenerRutaPorId(routeId); }); // ── Asignación de ruta por coordenadas (Haversine) ──────────────────── final routeAssignmentProvider = FutureProvider.family( (ref, coords) { return ref .watch(routesRepositoryProvider) .asignarRuta(coords.lat, coords.lng); }, ); // ── ETA para un domicilio ───────────────────────────────────────────── final etaProvider = FutureProvider.family< ETAResult, ({String routeId, double lat, double lng})>( (ref, params) { return ref .watch(routesRepositoryProvider) .calcularETA(params.routeId, params.lat, params.lng); }, );