import 'dart:convert'; import 'dart:math'; import 'package:manager_api_new/api.dart'; import 'package:tablet_app/client.dart'; class StatisticsService { final Client clientAPI; final String? instanceId; final String? configurationId; final String? appType; // "Mobile" or "Tablet" final String? language; final String sessionId; StatisticsService({ required this.clientAPI, required this.instanceId, required this.configurationId, this.appType = 'Tablet', this.language, }) : sessionId = _generateSessionId(); static String _generateSessionId() { final rand = Random(); final bytes = List.generate(16, (_) => rand.nextInt(256)); return bytes.map((b) => b.toRadixString(16).padLeft(2, '0')).join(); } Future track( String eventType, { String? sectionId, int? durationSeconds, Map? metadata, }) async { try { await clientAPI.statsApi!.statsTrackEvent(VisitEventDTO( instanceId: instanceId ?? '', configurationId: configurationId, sectionId: sectionId, sessionId: sessionId, eventType: eventType, appType: appType, language: language, durationSeconds: durationSeconds, metadata: metadata != null ? jsonEncode(metadata) : null, timestamp: DateTime.now(), )); } catch (_) { // fire-and-forget — never block the UI on stats errors } } }