class LocationIQ {
  String? placeId;
  String? licence;
  String? osmType;
  String? osmId;
  String? lat;
  String? lon;
  String? displayName;
  Address? address;
  List<String>? boundingbox;

  LocationIQ({
    this.placeId,
    this.licence,
    this.osmType,
    this.osmId,
    this.lat,
    this.lon,
    this.displayName,
    this.address,
    this.boundingbox,
  });

  LocationIQ.fromJson(Map<String, dynamic> json) {
    placeId = json['place_id'];
    licence = json['licence'];
    osmType = json['osm_type'];
    osmId = json['osm_id'];
    lat = json['lat'];
    lon = json['lon'];
    displayName = json['display_name'];
    address = json['address'] != null
        ? Address.fromJson(json['address'])
        : null;
    boundingbox = json['boundingbox'].cast<String>();
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = <String, dynamic>{};
    data['place_id'] = placeId;
    data['licence'] = licence;
    data['osm_type'] = osmType;
    data['osm_id'] = osmId;
    data['lat'] = lat;
    data['lon'] = lon;
    data['display_name'] = displayName;
    if (address != null) {
      data['address'] = address!.toJson();
    }
    data['boundingbox'] = boundingbox;
    return data;
  }
}

class Address {
  String? houseNumber;
  String? road;
  String? village;
  String? county;
  String? state;
  String? postcode;
  String? country;
  String? countryCode;
  // Optional: Kurzadresse für einfachere Anzeige
  String? shortAddress;

  Address({
    this.houseNumber,
    this.road,
    this.village,
    this.county,
    this.state,
    this.postcode,
    this.country,
    this.countryCode,
    // Optional: Kurzadresse generieren
    this.shortAddress,
  });

  Address.fromJson(Map<String, dynamic> json) {
    houseNumber = json['house_number'];
    road = json['road'];
    village = json['village'];
    county = json['county'];
    state = json['state'];
    postcode = json['postcode'];
    country = json['country'];
    countryCode = json['country_code'];
    // Optional: Kurzadresse generieren (z.B. "Test Street 123, 4812 Test Village")
    shortAddress = [
      if (road != null) road,
      if (houseNumber != null) '$houseNumber,',
      if (postcode != null) postcode,
      if (village != null) '$village,',
      if (county != null) '$county',
    ].join(' ');
  }

  Map<String, dynamic> toJson() {
    final Map<String, dynamic> data = <String, dynamic>{};
    data['house_number'] = houseNumber;
    data['road'] = road;
    data['village'] = village;
    data['county'] = county;
    data['state'] = state;
    data['postcode'] = postcode;
    data['country'] = country;
    data['country_code'] = countryCode;
    data['short_address'] = shortAddress;
    return data;
  }
}
