# geoapi/utils.py
from .models import NominationPlace

def save_nomination_place(data):
    try:
        place_id = int(data.get("place_id"))
        place, _ = NominationPlace.objects.update_or_create(
            place_id=place_id,
            defaults={
                "osm_type": data.get("osm_type"),
                "osm_id": data.get("osm_id"),
                "lat": float(data.get("lat", 0)),
                "lon": float(data.get("lon", 0)),
                "category": data.get("category"),
                "type": data.get("type"),
                "name": data.get("name"),
                "display_name": data.get("display_name"),
                "addresstype": data.get("addresstype"),
                "place_rank": data.get("place_rank"),
                "importance": data.get("importance"),
                "boundingbox": data.get("boundingbox"),

                "neighbourhood": data.get("address", {}).get("neighbourhood"),
                "suburb": data.get("address", {}).get("suburb"),
                "city_district": data.get("address", {}).get("city_district"),
                "city": data.get("address", {}).get("city"),
                "county": data.get("address", {}).get("county"),
                "state_district": data.get("address", {}).get("state_district"),
                "state": data.get("address", {}).get("state"),
                "postcode": data.get("address", {}).get("postcode"),
                "country": data.get("address", {}).get("country"),
                "country_code": data.get("address", {}).get("country_code"),
                "iso3166_lvl4": data.get("address", {}).get("ISO3166-2-lvl4"),
            }
        )
        return place
    except Exception as e:
        print("Error saving nomination place:", e)
        return None


def serialize_place(place):
    return {
        "place_id": place.place_id,
        "lat": str(place.lat),
        "lon": str(place.lon),
        "name": place.name,
        "display_name": place.display_name,
        "address": {
            "neighbourhood": place.neighbourhood,
            "suburb": place.suburb,
            "city_district": place.city_district,
            "city": place.city,
            "county": place.county,
            "state": place.state,
            "postcode": place.postcode,
            "country": place.country,
        },
        "boundingbox": place.boundingbox,
    }



VALID_API_CLIENTS = {
    "demo_client": "demo_key_123",
    "app_xyz": "xyz_secure_key_456",
    "partner_abc": "partner_key_789"
}

def is_valid_api_request(client_id, api_key):
    return VALID_API_CLIENTS.get(client_id) == api_key
