import 'package:posthog_flutter/posthog_flutter.dart';

// Monitoring
import 'analytics_client_base.dart';

class PosthogAnalyticsClient implements AnalyticsClientBase {
  static final Posthog _posthog = Posthog();

  const PosthogAnalyticsClient();

  @override
  Future<void> toggleAnalyticsCollection(bool enabled) {
    if (enabled) {
      return _posthog.enable();
    } else {
      return _posthog.disable();
    }
  }

  @override
  Future<void> identifyUser({
    required String userId,
    required String email,
    required String role,
  }) async {
    if (await _posthog.getDistinctId() == userId) return;
    return _posthog.identify(
      userId: userId,
      userProperties: {
        'email': email,
        'role': role,
      },
    );
  }

  @override
  Future<void> resetUser() {
    return _posthog.reset();
  }

  @override
  Future<void> trackEvent(String eventName, [Map<String, Object>? eventData]) {
    return _posthog.capture(eventName: eventName, properties: eventData);
  }

  @override
  Future<void> trackScreenView(String routeName, String action) {
    return _posthog.screen(
      screenName: routeName,
      properties: {'action': action},
    );
  }

  @override
  Future<void> trackNewAppOnboarding() {
    return _posthog.capture(eventName: 'user_completed_onboarding');
  }

  @override
  Future<void> trackAppCreated() {
    return _posthog.capture(eventName: 'app_created');
  }

  @override
  Future<void> trackAppUpdated() {
    return _posthog.capture(eventName: 'app_updated');
  }

  @override
  Future<void> trackAppDeleted() {
    return _posthog.capture(eventName: 'app_deleted');
  }

  @override
  Future<void> trackTaskCompleted(int completedCount) {
    return _posthog.capture(
      eventName: 'task_completed',
      properties: {
        'completed_count': completedCount,
      },
    );
  }

  @override
  Future<void> trackAppBackgrounded() {
    return _posthog.capture(eventName: 'app_backgrounded');
  }

  @override
  Future<void> trackAppForegrounded() {
    return _posthog.capture(eventName: 'app_foregrounded');
  }

  @override
  Future<void> trackBottomSheetView(String routeName, [Map<String, Object>? data]) {
    return _posthog.capture(
      eventName: 'bottom_sheet_view',
      properties: {
        'route_name': routeName,
        ...?data,
      },
    );
  }

  @override
  Future<void> trackDialogView(String dialogName, [Map<String, Object>? data]) {
    return _posthog.capture(
      eventName: 'dialog_view',
      properties: {
        'dialog_name': dialogName,
        ...?data,
      },
    );
  }

  @override
  Future<void> trackButtonPressed(String buttonName, [Map<String, Object>? data]) {
    return _posthog.capture(
      eventName: 'button_pressed',
      properties: {
        'button_name': buttonName,
        ...?data,
      },
    );
  }

  @override
  Future<void> trackPermissionRequest(String permission, String status) {
    return _posthog.capture(
      eventName: 'permission_requested',
      properties: {
        'permission': permission,
        'status': status,
      },
    );
  }
}