import 'dart:async'; import 'package:flutter/material.dart'; import 'notificaciones_service.dart'; // ─── ESTADO GLOBAL DEL CAMIÓN ─────────────────────────────────── class CamionEstado extends ChangeNotifier { int _positionId = 1; Timer? _timer; bool _corriendo = false; // Configuración de alertas bool notificarInicioRuta = true; bool notificarCamionCerca = true; bool notificarRetrasos = false; int get positionId => _positionId; bool get corriendo => _corriendo; // Etiquetas de cada posición static const Map etapas = { 1: '🏭 En el Relleno Sanitario', 2: '🚛 Ruta iniciada', 3: '📍 En camino a tu sector', 4: '⚡ Cerca de tu domicilio', 5: '🏘️ En tu colonia', 6: '📦 Recolectando residuos', 7: '↩️ Regresando', 8: '✅ Servicio finalizado', }; // ETA según posición static const Map> etaInfo = { 1: {'horaInicio': '--:--', 'horaFin': '--:--', 'minutos': 0, 'label': 'Sin servicio aún'}, 2: {'horaInicio': '7:00 p.m.','horaFin': '7:40 p.m.','minutos': 40, 'label': 'Ruta iniciada'}, 3: {'horaInicio': '7:10 p.m.','horaFin': '7:35 p.m.','minutos': 30, 'label': 'En camino'}, 4: {'horaInicio': '7:20 p.m.','horaFin': '7:30 p.m.','minutos': 15, 'label': 'Cerca de ti'}, 5: {'horaInicio': '7:25 p.m.','horaFin': '7:30 p.m.','minutos': 8, 'label': 'En tu colonia'}, 6: {'horaInicio': '7:28 p.m.','horaFin': '7:30 p.m.','minutos': 2, 'label': '¡Está aquí!'}, 7: {'horaInicio': '--:--', 'horaFin': '--:--', 'minutos': 0, 'label': 'Regresando'}, 8: {'horaInicio': '--:--', 'horaFin': '--:--', 'minutos': 0, 'label': 'Servicio completado'}, }; // ── Iniciar timer ─────────────────────────────────────────── void iniciarTimer() { if (_corriendo) return; _corriendo = true; _positionId = 1; notifyListeners(); // Avanza cada 8 segundos (puedes cambiarlo) _timer = Timer.periodic(const Duration(seconds: 8), (timer) async { if (_positionId >= 8) { detener(); return; } _positionId++; notifyListeners(); // Notificación automática al iniciar ruta if (_positionId == 2 && notificarInicioRuta) { await enviarNotificacion( id: 1, titulo: '¡Ruta Iniciada!', cuerpo: 'El camión recolector ha salido del Relleno Sanitario rumbo a tu sector. Asegúrate de tener listos tus residuos.', ); } // Notificación automática cuando está cerca if (_positionId == 4 && notificarCamionCerca) { await enviarNotificacion( id: 2, titulo: 'Camión Cercano 🚛', cuerpo: 'El camión está a menos de 15 minutos de tu domicilio. Es momento de sacar tus bolsas a la acera.', ); } // Notificación automática al finalizar if (_positionId == 8) { await enviarNotificacion( id: 3, titulo: 'Servicio Finalizado ✅', cuerpo: 'El camión de tu sector ha concluido su jornada de recolección diaria.', ); } }); } // ── Detener timer ─────────────────────────────────────────── void detener() { _timer?.cancel(); _corriendo = false; notifyListeners(); } // ── Reiniciar ─────────────────────────────────────────────── void reiniciar() { detener(); _positionId = 1; notifyListeners(); } @override void dispose() { _timer?.cancel(); super.dispose(); } } // Instancia global accesible desde cualquier archivo final camionEstado = CamionEstado();