import asyncio
import websockets
import json
import msgpack
import urllib3

# Targetujemy Twój port 2137!
URL = "ws://45.134.108.204:2137/mtr/api/map/updates"

async def listen():
    print(f"[*] Próba nawiązania połączenia WebSocket na porcie 2137...")
    try:
        # Łączymy się bezpośrednio z adresem IP i portem
        async with websockets.connect(URL, timeout=10) as websocket:
            print(f"[+] POŁĄCZONO! Czekam na dane o pociągach z portu 2137...")
            
            # Niektóre wersje MTR wymagają wysłania pustego pakietu na start
            await websocket.send(json.dumps({}))
            
            while True:
                message = await websocket.recv()
                
                # Próbujemy rozkodować (może być JSON lub MsgPack)
                try:
                    if isinstance(message, str):
                        data = json.loads(message)
                        print("[*] Odebrano JSON")
                    else:
                        data = msgpack.unpackb(message, raw=False)
                        print("[*] Odebrano MessagePack")
                    
                    # Szukamy pociągów
                    vehicles = data.get('data', {}).get('vehicles', []) if isinstance(data, dict) else []
                    if not vehicles and isinstance(data, dict):
                        vehicles = data.get('vehicles', [])

                    if vehicles:
                        print(f"✅ MAMY TO! Pociągi na żywo: {len(vehicles)}")
                        print(json.dumps(vehicles[0], indent=4, ensure_ascii=False))
                        return # Kończymy po pierwszym sukcesie
                    else:
                        print("[-] Dane odebrane, ale lista pojazdów pusta. Czekam dalej...")
                        
                except Exception as e:
                    print(f"[*] Odebrano nieznany format: {str(message)[:100]}... Błąd: {e}")

    except Exception as e:
        print(f"[-] Błąd połączenia na porcie 2137: {e}")

if __name__ == "__main__":
    asyncio.run(listen())
