import os import firebase_admin import urllib.parse import urllib.request from firebase_admin import credentials, messaging _firebase_initialized = False def init_firebase(cred_path: str): """Inicializa la conexión con Firebase usando el Service Account (JSON).""" global _firebase_initialized if os.path.exists(cred_path): try: cred = credentials.Certificate(cred_path) firebase_admin.initialize_app(cred) _firebase_initialized = True print(f"Firebase Admin SDK inicializado correctamente desde: {cred_path}") except ValueError: # Si el entorno se recarga, Firebase podría quejarse de que ya se inicializó _firebase_initialized = True except Exception as e: print(f"Error al inicializar Firebase: {e}") else: print(f"ADVERTENCIA: Credenciales no encontradas en '{cred_path}'.") print("Las notificaciones se ejecutarán en modo SIMULADO (solo consola).") def send_to_topic(topic: str, payload: dict): """Envía una notificación push a todos los dispositivos suscritos a un topic (ej. RUTA-01).""" title = payload.get("title", "") body = payload.get("body", "") # `data` viaja como Dict[str, str] en FCM; permite que el cliente # clasifique el evento (event, routeId) en notifications_screen.dart. raw_data = payload.get("data") or {} data: dict[str, str] = {str(k): str(v) for k, v in raw_data.items() if v is not None} if not _firebase_initialized: print(f"[MOCK PUSH] -> Topic: {topic} | Título: '{title}' | Mensaje: '{body}' | Data: {data}") return try: message = messaging.Message( notification=messaging.Notification( title=title, body=body, ), data=data or None, topic=topic, ) response = messaging.send(message) print(f"Push enviado al topic '{topic}' exitosamente. MessageID: {response}") except Exception as e: print(f"Error al enviar push al topic '{topic}': {e}") def send_whatsapp_alert(phone: str, message: str): """ Envía un WhatsApp usando la API gratuita de CallMeBot. """ print("\n" + "="*50) print(f"🟢 [WHATSAPP TRIGGER] Preparando mensaje para {phone}") print(f"💬 Mensaje: {message}") print("="*50 + "\n") # REEMPLAZA ESTO POR EL CÓDIGO QUE TE DIO EL BOT EN WHATSAPP: apikey = "6756808" # <--- BORRA "TU_API_KEY_AQUI" Y PON TU CÓDIGO REAL AQUÍ safe_msg = urllib.parse.quote(message) url = f"https://api.callmebot.com/whatsapp.php?phone={phone}&text={safe_msg}&apikey={apikey}" try: urllib.request.urlopen(url, timeout=5) except Exception as e: print(f"Error enviando WhatsApp real: {e}")