class Igel { final int id; final String name; final String? gender; // 'männlich' | 'weiblich' | 'unbekannt' final String? feature; // Merkmal final String? note; // Information // 🆕 NEU: final DateTime? rescuedAt; // YYYY-MM-DD (Datum) final String? location; // Ort / Fundstelle final String? marking; final String? finder; final String? phone; final String? email; final String? admissionReason; final String? animalCondition; final DateTime? releasedAt; // YYYY-MM-DD (Datum) final String? releaseLocation; final DateTime? createdAt; final DateTime? updatedAt; Igel({ required this.id, required this.name, this.gender, this.feature, this.note, this.rescuedAt, this.location, this.marking, this.finder, this.phone, this.email, this.admissionReason, this.animalCondition, this.releasedAt, this.releaseLocation, this.createdAt, this.updatedAt, }); static DateTime? _parseDateOrNull(String? s) { if (s == null || s.isEmpty) return null; try { return DateTime.parse(s); } catch (_) { return null; } } factory Igel.fromMap(Map m) { return Igel( id: (m['id'] as num).toInt(), name: (m['name'] ?? '') as String, gender: m['gender'] as String?, feature: m['feature'] as String?, note: m['note'] as String?, rescuedAt: _parseDateOrNull(m['rescued_at'] as String?), location: m['location'] as String?, marking: m['marking'] as String?, finder: m['finder'] as String?, phone: m['phone'] as String?, email: m['email'] as String?, admissionReason: m['admission_reason'] as String?, animalCondition: m['animal_condition'] as String?, releasedAt: _parseDateOrNull(m['released_at'] as String?), releaseLocation: m['release_location'] as String?, createdAt: _parseDateOrNull(m['created_at'] as String?), updatedAt: _parseDateOrNull(m['updated_at'] as String?), ); } Map toMapForCreateUpdate() { String? fmtDate(DateTime? d) => d?.toIso8601String().split('T').first; return { 'name': name, 'gender': gender, 'feature': feature, 'note': note, 'rescued_at': fmtDate(rescuedAt), 'location': location?.trim().isEmpty == true ? null : location, 'marking': marking?.trim().isEmpty == true ? null : marking, 'finder': finder?.trim().isEmpty == true ? null : finder, 'phone': phone?.trim().isEmpty == true ? null : phone, 'email': email?.trim().isEmpty == true ? null : email, 'admission_reason': admissionReason?.trim().isEmpty == true ? null : admissionReason, 'animal_condition': animalCondition?.trim().isEmpty == true ? null : animalCondition, 'released_at': fmtDate(releasedAt), 'release_location': releaseLocation?.trim().isEmpty == true ? null : releaseLocation, }; } Igel copyWith({ String? name, String? gender, String? feature, String? note, DateTime? rescuedAt, String? location, String? marking, String? finder, String? phone, String? email, String? admissionReason, String? animalCondition, DateTime? releasedAt, String? releaseLocation, DateTime? createdAt, DateTime? updatedAt, }) { return Igel( id: id, name: name ?? this.name, gender: gender ?? this.gender, feature: feature ?? this.feature, note: note ?? this.note, rescuedAt: rescuedAt ?? this.rescuedAt, location: location ?? this.location, marking: marking ?? this.marking, finder: finder ?? this.finder, phone: phone ?? this.phone, email: email ?? this.email, admissionReason: admissionReason ?? this.admissionReason, animalCondition: animalCondition ?? this.animalCondition, releasedAt: releasedAt ?? this.releasedAt, releaseLocation: releaseLocation ?? this.releaseLocation, createdAt: createdAt ?? this.createdAt, updatedAt: updatedAt ?? this.updatedAt, ); } }