import 'package:cloud_firestore/cloud_firestore.dart'; import 'package:latlong2/latlong.dart'; class EventModel { final String id; final String name; final String description; final DateTime startDateTime; final DateTime endDateTime; final double price; final int installationTime; final int disassemblyTime; final String eventTypeId; final String customerId; final String address; final double latitude; final double longitude; final List workforce; final List> documents; EventModel({ required this.id, required this.name, required this.description, required this.startDateTime, required this.endDateTime, required this.price, required this.installationTime, required this.disassemblyTime, required this.eventTypeId, required this.customerId, required this.address, required this.latitude, required this.longitude, required this.workforce, required this.documents, }); factory EventModel.fromMap(Map map, String id) { final List workforceRefs = map['workforce'] ?? []; final Timestamp? startTimestamp = map['StartDateTime'] as Timestamp?; final Timestamp? endTimestamp = map['EndDateTime'] as Timestamp?; final docsRaw = map['documents'] ?? []; final docs = docsRaw is List ? docsRaw.map>((e) { if (e is Map) { return Map.from(e as Map); } else if (e is String) { final fileName = Uri.decodeComponent(e.split('/').last.split('?').first); return {'name': fileName, 'url': e}; } else { return {}; } }).toList() : >[]; return EventModel( id: id, name: map['Name'] ?? '', description: map['Description'] ?? '', startDateTime: startTimestamp?.toDate() ?? DateTime.now(), endDateTime: endTimestamp?.toDate() ?? DateTime.now().add(const Duration(hours: 1)), price: (map['Price'] ?? 0.0).toDouble(), installationTime: map['InstallationTime'] ?? 0, disassemblyTime: map['DisassemblyTime'] ?? 0, eventTypeId: map['EventType'] is DocumentReference ? (map['EventType'] as DocumentReference).id : '', customerId: map['customer'] is DocumentReference ? (map['customer'] as DocumentReference).id : '', address: map['Address'] ?? '', latitude: (map['Latitude'] ?? 0.0).toDouble(), longitude: (map['Longitude'] ?? 0.0).toDouble(), workforce: workforceRefs.whereType().toList(), documents: docs, ); } Map toMap() { return { 'Name': name, 'Description': description, 'StartDateTime': Timestamp.fromDate(startDateTime), 'EndDateTime': Timestamp.fromDate(endDateTime), 'Price': price, 'InstallationTime': installationTime, 'DisassemblyTime': disassemblyTime, 'EventType': eventTypeId, 'customer': customerId, 'Address': address, 'Position': GeoPoint(latitude, longitude), 'Latitude': latitude, 'Longitude': longitude, 'workforce': workforce, 'documents': documents, }; } }