import 'package:firebase_messaging/firebase_messaging.dart';

class FirebaseMessagingService {
  FirebaseMessaging _firebaseMessaging = FirebaseMessaging.instance;

  Future<void> initializeFirebaseMessaging() async {
    // Solicitar permisos de notificación si es necesario (opcional)
    NotificationSettings settings = await _firebaseMessaging.requestPermission(
      alert: true,
      badge: true,
      sound: true,
    );

    // Verificar si los permisos de notificación están habilitados
    if (settings.authorizationStatus == AuthorizationStatus.authorized ||
        settings.authorizationStatus == AuthorizationStatus.provisional) {
      // Obtener el token de registro para la instancia de la aplicación
      String? token = await _firebaseMessaging.getToken();
      print('Token FCM: $token');

      // Escuchar los mensajes entrantes en la aplicación
      FirebaseMessaging.onMessage.listen((RemoteMessage message) {
        print('Mensaje FCM recibido: ${message.notification?.title} - ${message.notification?.body}');
        // Aquí puedes mostrar la notificación o procesar los datos recibidos según tus necesidades
      });

      // Manejar la notificación cuando se toca y la aplicación está en primer plano (opcional)
      FirebaseMessaging.onMessageOpenedApp.listen((RemoteMessage message) {
        print('Mensaje FCM abierto desde la aplicación en primer plano: ${message.notification?.title} - ${message.notification?.body}');
        // Aquí puedes redirigir al usuario a una pantalla específica o realizar acciones según los datos recibidos
      });

      // Manejar la notificación cuando se toca y la aplicación está cerrada (opcional)
      RemoteMessage? initialMessage = await FirebaseMessaging.instance.getInitialMessage();
      if (initialMessage != null) {
        print('Mensaje FCM abierto desde la aplicación cerrada: ${initialMessage.notification?.title} - ${initialMessage.notification?.body}');
        // Aquí puedes redirigir al usuario a una pantalla específica o realizar acciones según los datos recibidos
      }
    }
  }
}
