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, }, ); } }