class Field { final String id; final String name; final int plotCount; final String userId; // Fields untuk data regional final String? region; final String? location; final double? areaSize; final String areaUnit; final String ownershipType; final String? ownerName; final Map? regionSpecificData; final DateTime createdAt; final DateTime updatedAt; Field({ required this.id, required this.name, required this.plotCount, required this.userId, this.region, this.location, this.areaSize, this.areaUnit = 'm²', this.ownershipType = 'Milik Sendiri', this.ownerName, this.regionSpecificData, required this.createdAt, required this.updatedAt, }); factory Field.fromJson(Map json) { return Field( id: json['id'], name: json['name'] ?? 'Lahan Tanpa Nama', plotCount: json['plot_count'] is int ? json['plot_count'] : int.tryParse(json['plot_count']?.toString() ?? '1') ?? 1, userId: json['user_id'], region: json['region'], location: json['location'], areaSize: json['area_size'] is double ? json['area_size'] : double.tryParse(json['area_size']?.toString() ?? '0'), areaUnit: json['area_unit'] ?? 'm²', ownershipType: json['ownership_type'] ?? 'Milik Sendiri', ownerName: json['owner_name'], regionSpecificData: json['region_specific_data'] is Map ? Map.from(json['region_specific_data']) : null, createdAt: json['created_at'] != null ? json['created_at'] is DateTime ? json['created_at'] : DateTime.parse(json['created_at']) : DateTime.now(), updatedAt: json['updated_at'] != null ? json['updated_at'] is DateTime ? json['updated_at'] : DateTime.parse(json['updated_at']) : DateTime.now(), ); } // Alias untuk kompatibilitas dengan kode yang ada factory Field.fromMap(Map map) => Field.fromJson(map); Map toJson() { return { 'id': id, 'name': name, 'plot_count': plotCount, 'user_id': userId, 'region': region, 'location': location, 'area_size': areaSize, 'area_unit': areaUnit, 'ownership_type': ownershipType, 'owner_name': ownerName, 'region_specific_data': regionSpecificData, 'created_at': createdAt.toIso8601String(), 'updated_at': updatedAt.toIso8601String(), }; } Field copyWith({ String? name, String? region, String? location, double? areaSize, String? areaUnit, int? plotCount, String? ownershipType, String? ownerName, Map? regionSpecificData, }) { return Field( id: id, name: name ?? this.name, region: region ?? this.region, location: location ?? this.location, areaSize: areaSize ?? this.areaSize, areaUnit: areaUnit ?? this.areaUnit, plotCount: plotCount ?? this.plotCount, ownershipType: ownershipType ?? this.ownershipType, ownerName: ownerName ?? this.ownerName, regionSpecificData: regionSpecificData ?? this.regionSpecificData, userId: userId, createdAt: createdAt, updatedAt: DateTime.now(), ); } }