import 'package:firebase_analytics/firebase_analytics.dart';
import 'package:flutter/foundation.dart';
import '../models/analytics_event_item.dart' as comwell;

class FirebaseTracker {
  final _tracking = FirebaseAnalytics.instance;

  void trackScreen({required String name, required String path}) {
    _trackScreen( name, path);
  }

  void trackAddToCart(comwell.AnalyticsEventItem analyticsEventItem) {
    _track(_eventAddToCart, analyticsEventItem.toJson());
  }

  void trackRemoveFromCard(comwell.AnalyticsEventItem analyticsEventItem) {
    _track(_eventRemoveFromCart, analyticsEventItem.toJson());
  }

  void trackBeginCheckout(comwell.AnalyticsEventItem analyticsEventItem) {
    _track(_eventBeginCheckout, analyticsEventItem.toJson());
  }

  void tracklogin() {
    _tracking.logLogin();
  }

  void trackEvent(String name) {
    _track(name, null);
  }

  void trackBookNewReservation() {
    _tracking.logEvent(name: 'click', parameters: {'click_text': 'Book nyt ophold'});
  }

  void trackSuccessfulCheckIn(Map<String, Object> parameters) {
    _tracking.logEvent(name: 'check_in_success', parameters: parameters);
  }

  void trackFailedCheckIn(Map<String, Object> parameters) {
    _tracking.logEvent(name: 'check_in_failure', parameters: parameters);
  }

  void _track(String name, Map<String, dynamic>? parameters) async {
    try {
      final safeParams = parameters?.map((k, v) {
        if (v is List) {
          return MapEntry(k, v.join(','));
        }
        return MapEntry(k, v as Object);
      }) ?? <String, Object>{};
      await _tracking.logEvent(
        name: name,
        parameters: safeParams,
      );
    } catch (e, st) {
      if (kDebugMode) print("err=$e, $st");

    }
  }
  void _trackScreen(String name, String screenClass) async {
    try {
      await _tracking.logScreenView(
        screenName: name,
        screenClass: screenClass
      );
      print('qqq trackScreen: $name, $screenClass');
    } catch (e, st) {
      if (kDebugMode) print("err=$e, $st");

    }
  }

  // event names
  //static const _eventScreenView = "screen_view";
  static const _eventAddToCart = "add_to_cart";
  static const _eventRemoveFromCart = "remove_from_cart";
  static const _eventBeginCheckout = "begin_checkout";

  void trackComwellClubSignup() {
    _tracking.logEvent(name: 'club_sign_up');
  }

  // params
 // static const _paramScreenClass = "screen_class";
 // static const _paramScreenName = "screen_name";
}