import 'dart:developer';

import 'package:firebase_core/firebase_core.dart';
import 'package:firebase_messaging/firebase_messaging.dart';
import 'package:flutter/cupertino.dart';

import '../api/marianumcloud/talk/room/getRoom.dart';
import '../api/marianumcloud/talk/room/getRoomParams.dart';
import '../model/accountData.dart';
import 'notificationService.dart';

class NotificationController {
  @pragma('vm:entry-point')
  static Future<void> onBackgroundMessageHandler(RemoteMessage message) async {
    log("Handling a background notification: ${message.messageId}");

    await Firebase.initializeApp();
    AccountData().waitForPopulation().then((value) {
      log("User account status: $value");
      if(value) {
        GetRoom(
          GetRoomParams(
            includeStatus: false,
          ),
        ).run().then((value) {
          var messageCount = value.data.map((e) => e.unreadMessages).reduce((a, b) => a + b);
          var chatCount = value.data.where((e) => e.unreadMessages > 0).length;
          var people = value.data.where((e) => e.unreadMessages > 0).map((e) => e.displayName.split(" ")[0]);

          final NotificationService service = NotificationService();
          service.initializeNotifications().then((value) {
            service.showNotification(
              title: "Du hast $messageCount ungelesene Nachrichten!",
              body: "In $chatCount Chats, von ${people.join(", ")}",
              badgeCount: messageCount,
            );
          });
        });
      }
    });
  }

  static Future<void> onForegroundMessageHandler(RemoteMessage message, BuildContext context) async {
    NotificationService().showToast(message: "Du hast eine neue Talk Nachricht!", context: context);
  }
}