class Device { final int id; final String? callsign; final String? name; final String? city; final String? state; final String? country; final String? surname; final String? linkname; final String? hardware; final String? firmware; final String? tx; final String? rx; final int? colorcode; final int? status; final int? lastKnownMaster; final double? lat; final double? lng; final String? website; final int? pep; final int? agl; final String? description; final String? createdAt; final String? updatedAt; final String? lastSeen; final List? permissions; Device({ required this.id, this.callsign, this.name, this.city, this.state, this.country, this.surname, this.linkname, this.hardware, this.firmware, this.tx, this.rx, this.colorcode, this.status, this.lastKnownMaster, this.lat, this.lng, this.website, this.pep, this.agl, this.description, this.createdAt, this.updatedAt, this.lastSeen, this.permissions, }); factory Device.fromJson(Map json) { return Device( id: json['id'] as int, callsign: json['callsign'] as String?, name: json['name'] as String?, city: json['city'] as String?, state: json['state'] as String?, country: json['country'] as String?, surname: json['surname'] as String?, linkname: json['linkname'] as String?, hardware: json['hardware'] as String?, firmware: json['firmware'] as String?, tx: json['tx'] as String?, rx: json['rx'] as String?, colorcode: json['colorcode'] as int?, status: json['status'] as int?, lastKnownMaster: json['last_known_master'] as int?, lat: json['lat'] as double?, lng: json['lng'] as double?, website: json['website'] as String?, pep: json['pep'] as int?, agl: json['agl'] as int?, description: json['description'] as String?, createdAt: json['created_at'] as String?, updatedAt: json['updated_at'] as String?, lastSeen: json['last_seen'] as String?, permissions: (json['permissions'] as List?) ?.map((e) => e as String) .toList(), ); } Map toJson() { return { 'id': id, 'callsign': callsign, 'name': name, 'city': city, 'state': state, 'country': country, 'surname': surname, 'linkname': linkname, 'hardware': hardware, 'firmware': firmware, 'tx': tx, 'rx': rx, 'colorcode': colorcode, 'status': status, 'last_known_master': lastKnownMaster, 'lat': lat, 'lng': lng, 'website': website, 'pep': pep, 'agl': agl, 'description': description, 'created_at': createdAt, 'updated_at': updatedAt, 'last_seen': lastSeen, 'permissions': permissions, }; } String get displayLocation { final parts = []; if (city != null && city!.isNotEmpty) parts.add(city!); if (state != null && state!.isNotEmpty) parts.add(state!); if (country != null && country!.isNotEmpty) parts.add(country!); return parts.isEmpty ? 'Unknown Location' : parts.join(', '); } String get displayName { return name ?? callsign ?? 'Unknown Device'; } }