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

# Celujemy w port Twojej mapy (2137)
URL = "http://45.134.108.204:2137/mtr/api/map/updates"

def main():
    print("=== OPERACJA: MAGIC-MTR TELEMETRY SNIFFER ===")
    session = requests.Session()
    
    # KROK 1: Pukamy, żeby dostać aktualny czas serwera (currentTime)
    print("[1] Pobieranie tokenu czasu...")
    try:
        r1 = session.get(URL, verify=False, timeout=5)
        # Próbujemy rozkodować (MTR na 2137 często sypie MsgPackiem)
        init_data = msgpack.unpackb(r1.content, raw=False)
        server_time = init_data.get('currentTime', 0)
        print(f"[+] Czas serwera: {server_time}")

        # KROK 2: Wysyłamy "magiczne" zapytanie o synchronizację
        # MAGIC-MTR wymaga 'lastUpdated', żeby zacząć sypać pojazdami!
        payload = {
            "lastUpdated": server_time - 1000, # Prosimy o dane z ostatniej sekundy
            "x": 0, "z": 0, "radius": 200000,
            "zoom": 1
        }

        print("[2] Próba wymuszenia strumienia pojazdów...")
        # MAGIC reaguje na POST do tego samego endpointu
        r2 = session.post(URL, json=payload, verify=False, timeout=5)
        
        # Dekodujemy odpowiedź
        data = msgpack.unpackb(r2.content, raw=False)
        
        # MAGIC wrzuca pociągi w data -> vehicles
        if 'data' in data:
            d = data['data']
            # Szukamy kluczy pociągów
            for key in ['vehicles', 'trains', 'v']:
                if key in d and d[key]:
                    print(f"✅ MAMY TO! MAGIC ODDAŁ POCIĄGI! (Klucz: {key})")
                    print(f"Liczba pociągów: {len(d[key])}")
                    print("\n=== DANE POCIĄGU ===")
                    print(json.dumps(d[key][0], indent=4, ensure_ascii=False))
                    return

        print("[-] Serwer odpowiedział, ale nadal brak pociągów w paczce.")
        print("Dostępne klucze w 'data':", list(data.get('data', {}).keys()))

    except Exception as e:
        print(f"[-] Błąd: {e}")

if __name__ == "__main__":
    main()
