import requests
import random
import time

def sprawdz_czy_w_warszawie(lat, lon):
    """
    Sprawdza czy podane współrzędne znajdują się w granicach Warszawy
    używając Nominatim API (OpenStreetMap)
    """
    url = "https://nominatim.openstreetmap.org/reverse"
    params = {
        'format': 'json',
        'lat': lat,
        'lon': lon,
        'zoom': 10,
        'addressdetails': 1
    }
    
    headers = {
        'User-Agent': 'Warsaw-Coordinates-Generator'
    }
    
    try:
        response = requests.get(url, params=params, headers=headers, timeout=5)
        if response.status_code == 200:
            data = response.json()
            address = data.get('address', {})
            
            # Sprawdza czy miasto to Warszawa
            city = address.get('city', '')
            town = address.get('town', '')
            municipality = address.get('municipality', '')
            
            return any('warszawa' in place.lower() for place in [city, town, municipality] if place)
        
        return False
    except:
        return False

def losuj_punkt_warszawy():
    """
    Losuje punkt w przybliżonych granicach Warszawy
    Warszawa: ~52.1-52.4°N, ~20.9-21.3°E
    """
    # Rozszerzone granice dla lepszego pokrycia
    min_lat, max_lat = 52.08, 52.42
    min_lon, max_lon = 20.85, 21.35
    
    max_attempts = 50
    
    for attempt in range(max_attempts):
        lat = round(random.uniform(min_lat, max_lat), 5)
        lon = round(random.uniform(min_lon, max_lon), 5)
        
        if sprawdz_czy_w_warszawie(lat, lon):
            return lat, lon
        
        # Opóźnienie między zapytaniami do API
        time.sleep(1.1)
    
    # Fallback - zwraca centrum Warszawy jeśli nie znajdzie punktu
    return 52.23679, 21.01735

def main():
    print("Generowanie losowych współrzędnych w Warszawie...")
    
    lat, lon = losuj_punkt_warszawy()
    
    print(f"Szerokość geograficzna: {lat}")
    print(f"Długość geograficzna: {lon}")
    print(f"Współrzędne: {lat}, {lon}")

if __name__ == "__main__":
    main()
