import 'package:cloud_firestore/cloud_firestore.dart'; enum AuditAction { create, update, delete, } enum EntityType { timeRegistration, user, tariffProfile, } class AuditLog { final String id; final String userId; final String organizationId; final AuditAction action; final EntityType entityType; final String entityId; final Map? before; final Map? after; final DateTime timestamp; final String? ipAddress; AuditLog({ required this.id, required this.userId, required this.organizationId, required this.action, required this.entityType, required this.entityId, this.before, this.after, required this.timestamp, this.ipAddress, }); factory AuditLog.fromFirestore(DocumentSnapshot doc) { final data = doc.data() as Map; return AuditLog( id: doc.id, userId: data['userId'] ?? '', organizationId: data['organizationId'] ?? '', action: _parseAction(data['action']), entityType: _parseEntityType(data['entityType']), entityId: data['entityId'] ?? '', before: data['changes']?['before'], after: data['changes']?['after'], timestamp: (data['timestamp'] as Timestamp).toDate(), ipAddress: data['ipAddress'], ); } Map toFirestore() { return { 'userId': userId, 'organizationId': organizationId, 'action': action.name, 'entityType': entityType.name, 'entityId': entityId, 'changes': { 'before': before, 'after': after, }, 'timestamp': Timestamp.fromDate(timestamp), 'ipAddress': ipAddress, }; } static AuditAction _parseAction(String? actionString) { switch (actionString) { case 'update': return AuditAction.update; case 'delete': return AuditAction.delete; default: return AuditAction.create; } } static EntityType _parseEntityType(String? typeString) { switch (typeString) { case 'user': return EntityType.user; case 'tariffProfile': return EntityType.tariffProfile; default: return EntityType.timeRegistration; } } String get actionDisplayName { switch (action) { case AuditAction.create: return 'Opprettet'; case AuditAction.update: return 'Endret'; case AuditAction.delete: return 'Slettet'; } } String get entityTypeDisplayName { switch (entityType) { case EntityType.timeRegistration: return 'Timeregistrering'; case EntityType.user: return 'Bruker'; case EntityType.tariffProfile: return 'Tariffprofil'; } } }