import os
import json
try:
    import msgpack
except ImportError:
    print("[!] Brak biblioteki msgpack! Zainstaluj ją poleceniem: pip3 install msgpack")
    exit(1)

BASE_PATH = "/var/lib/pterodactyl/volumes/cc7ccc03-03bd-4bde-8488-3057d3803420/world/mtr/minecraft/overworld"
FOLDERS = ["platforms", "sidings", "depots"]

def explore_folder(folder_name):
    full_path = os.path.join(BASE_PATH, folder_name)
    if not os.path.exists(full_path):
        print(f"\n[-] Folder {folder_name} nie istnieje w {full_path}")
        return
    
    print(f"\n=== Skanowanie folderu: {folder_name} ===")
    
    found_files = []
    # Szukamy plików wewnątrz ponumerowanych podfolderów
    for root, dirs, files in os.walk(full_path):
        for file in files:
            # Ignorujemy puste/tymczasowe
            if file.endswith(".msgpack") or not file.startswith("."): 
                found_files.append(os.path.join(root, file))
            
    print(f"[*] Znaleziono {len(found_files)} plików w folderze {folder_name}.")
    if not found_files:
        return
        
    # Bierzemy pierwszy plik z brzegu jako próbkę
    sample_file = found_files[0]
    print(f"[*] Próba dekodowania pliku: {sample_file}")
    
    try:
        with open(sample_file, "rb") as f:
            content = f.read()
            
        try:
            # Format binarny MessagePack (Standard w MTR)
            decoded = msgpack.unpackb(content, raw=False)
            
            # Formatujemy do ładnego tekstu
            formatted = json.dumps(decoded, indent=4, ensure_ascii=False)
            print(f"[+] SUKCES! Zdekodowano MessagePack. Pierwsze 500 znaków:")
            print(formatted[:500] + "\n... (ucięte)")
            
            # Zapisujemy do pliku, by Książe mógł wkleić
            out_name = f"/root/ciapongi-mapa/sample_{folder_name}.json"
            with open(out_name, "w", encoding="utf-8") as out_f:
                out_f.write(formatted)
            print(f"[!] Zapisano całą strukturę do: {out_name}")
            
        except Exception as e_msgpack:
            try:
                # Opcja B: to jednak zwykły JSON
                decoded = json.loads(content.decode('utf-8'))
                print(f"[+] SUKCES! To zwykły JSON.")
                out_name = f"/root/ciapongi-mapa/sample_{folder_name}.json"
                with open(out_name, "w", encoding="utf-8") as out_f:
                    json.dump(decoded, out_f, indent=4, ensure_ascii=False)
                print(f"[!] Zapisano całą strukturę do: {out_name}")
            except Exception as e_json:
                print(f"[!] Nie udało się zdekodować ani jako MsgPack, ani JSON.")
                
    except Exception as e:
        print(f"[!] Błąd przy otwieraniu pliku: {e}")

def main():
    print(">>> ROZPOCZYNAM DEKODOWANIE PLIKÓW MTR <<<")
    for f in FOLDERS:
        explore_folder(f)
    print("\n>>> ZAKOŃCZONO <<<")

if __name__ == "__main__":
    main()
