import 'package:shared_preferences/shared_preferences.dart'; import '../models/dokument_typ.dart'; /// Lokale Kennzahlen (keine Cloud) – Fokus: PDFs & Dokumenttypen. class WorkflowMetricsService { WorkflowMetricsService._(); static const _kPdfTotal = 'hp_metrics_pdf_total'; static const _kPdfWeek = 'hp_metrics_pdf_week'; static const _kPdfWeekId = 'hp_metrics_pdf_week_id'; static const _kLastPdfAt = 'hp_metrics_last_pdf_at'; static const _kPrefixDoc = 'hp_metrics_doc_'; static DateTime _montagNullUhr(DateTime d) { final t = DateTime(d.year, d.month, d.day); return t.subtract(Duration(days: t.weekday - DateTime.monday)); } static int _kalenderWocheSchluessel(DateTime d) { final m = _montagNullUhr(d); return m.year * 10000 + m.month * 100 + m.day; } static Future recordPdfExported() async { final p = await SharedPreferences.getInstance(); final now = DateTime.now(); final wid = _kalenderWocheSchluessel(now); final stored = p.getInt(_kPdfWeekId); var week = p.getInt(_kPdfWeek) ?? 0; if (stored != wid) { week = 0; await p.setInt(_kPdfWeekId, wid); } week += 1; final total = (p.getInt(_kPdfTotal) ?? 0) + 1; await p.setInt(_kPdfWeek, week); await p.setInt(_kPdfTotal, total); await p.setString(_kLastPdfAt, now.toIso8601String()); } static Future recordDokumentGespeichert(DokumentTyp typ) async { final p = await SharedPreferences.getInstance(); final k = '$_kPrefixDoc${typ.storageValue}'; await p.setInt(k, (p.getInt(k) ?? 0) + 1); } static Future load() async { final p = await SharedPreferences.getInstance(); final wid = _kalenderWocheSchluessel(DateTime.now()); final stored = p.getInt(_kPdfWeekId); final week = (stored == wid) ? (p.getInt(_kPdfWeek) ?? 0) : 0; final total = p.getInt(_kPdfTotal) ?? 0; final last = DateTime.tryParse(p.getString(_kLastPdfAt) ?? ''); final byDoc = {}; for (final t in DokumentTyp.values) { final k = '$_kPrefixDoc${t.storageValue}'; final n = p.getInt(k); if (n != null && n > 0) byDoc[t.storageValue] = n; } return WorkflowMetricsSnapshot( pdfThisCalendarWeek: week, pdfAllTime: total, lastPdfAt: last, savesByDokumentTyp: byDoc, ); } } class WorkflowMetricsSnapshot { WorkflowMetricsSnapshot({ required this.pdfThisCalendarWeek, required this.pdfAllTime, required this.lastPdfAt, required this.savesByDokumentTyp, }); final int pdfThisCalendarWeek; final int pdfAllTime; final DateTime? lastPdfAt; final Map savesByDokumentTyp; }