import requests, json, urllib3, time
try:
    import msgpack
except ImportError:
    print("pip3 install msgpack")
    exit()
urllib3.disable_warnings()

BASE_URL = "https://mtr.ciapongi.szablix.pl/mtr/api/map/updates"

def hack():
    print("=== OPERACJA: AUTOMATYCZNY RADAR (SYNC MODE) ===")
    session = requests.Session()
    
    # KROK 1: Inicjalizacja sesji i pobranie bazy
    print("[1] Inicjalizacja połączenia...")
    try:
        r = session.get(BASE_URL, verify=False, timeout=5)
        raw_data = msgpack.unpackb(r.content, raw=False)
        
        # Wyciągamy currentTime jako nasz punkt startowy synchronizacji
        current_time = raw_data.get('currentTime', 0)
        print(f"[+] Serwer żyje. Czas: {current_time}")

        # KROK 2: Pętla wymuszania pozycji (Automatyka)
        print("[2] Wchodzę w tryb śledzenia pociągów...")
        
        # Wysyłamy zapytanie o aktualizację od ostatniego czasu
        payload = {
            "lastUpdated": current_time,
            "x": 0, "z": 0, "radius": 100000 # Ogromny obszar
        }
        
        for i in range(3): # Spróbujmy 3 razy w krótkim odstępie
            print(f"[*] Próba {i+1} pobrania telemetrii...")
            r_live = session.post(BASE_URL, json=payload, verify=False, timeout=5)
            
            try:
                live_data = msgpack.unpackb(r_live.content, raw=False)
                # Szukamy wszystkiego co ma współrzędne
                if 'data' in live_data:
                    d = live_data['data']
                    print(f"[*] Klucze w data: {list(d.keys()) if isinstance(d, dict) else 'Brak słownika'}")
                    
                    # Szukamy pociągów w różnych wariantach kluczy
                    for key in ['vehicles', 'v', 'trains']:
                        if key in d and d[key]:
                            print(f"✅ MAMY TO! Znaleziono pociągi w kluczu: {key}")
                            print(json.dumps(d[key][0], indent=4))
                            return
                
                print(f"[-] Brak pociągów w tej paczce (Rozmiar: {len(r_live.content)}b)")
                # Aktualizujemy czas na ten z serwera dla następnej próby
                payload['lastUpdated'] = live_data.get('currentTime', payload['lastUpdated'])
                
            except Exception as e:
                print(f"Błąd dekodowania: {e}")
            
            time.sleep(1)

    except Exception as e:
        print(f"Błąd ogólny: {e}")

if __name__ == "__main__":
    hack()
