import requests
import json

# 🔹 CONFIGURATION 🔹
API_KEY = "lUCRvOPYXci0DOVAz61u"  # 🔑 Clé API AllDebrid
API_MAGNET_FILES = "https://api.alldebrid.com/v4/magnet/files"

# 🔹 Fonction pour récupérer les fichiers d'un magnet 🔹
def fetch_magnet_files(magnet_id):
    headers = {
        "Authorization": f"Bearer {API_KEY}",
        "Content-Type": "application/x-www-form-urlencoded"
    }
    payload = {"id[]": magnet_id}  # Envoie l'ID sous forme d'un tableau (conforme à l'API)

    print(f"\n📡 Envoi de la requête `magnet/files` pour le magnet ID {magnet_id}...")
    print(f"🔍 **Payload envoyé :** {payload}")

    response = requests.post(API_MAGNET_FILES, headers=headers, data=payload)
    data = response.json()

    print("\n🔍 **Réponse API Fichiers :**")
    print(json.dumps(data, indent=4))

    if not data or "data" not in data or "magnets" not in data["data"]:
        print(f"❌ Erreur lors de la récupération des fichiers pour le magnet ID {magnet_id}.")
        return []

    return data["data"]["magnets"]

# 🔹 Extraire les fichiers 🔹
def extract_files(files_data):
    extracted_files = []

    def parse_tree(tree, parent_path=""):
        for item in tree:
            if "e" in item:  # C'est un dossier
                parse_tree(item["e"], parent_path + item["n"] + "/")
            else:  # C'est un fichier
                extracted_files.append({
                    "filename": parent_path + item["n"],
                    "size": round(item["s"] / (1024 * 1024 * 1024), 2),  # Convertir en GB
                    "url": item["l"]
                })

    parse_tree(files_data)
    return extracted_files

# 🔹 Exécuter le script 🔹
if __name__ == "__main__":
    magnet_id = input("🔹 Entrez l'ID du magnet : ").strip()

    if not magnet_id.isdigit():
        print("❌ Erreur : L'ID du magnet doit être un nombre entier.")
        exit(1)

    magnet_files = fetch_magnet_files(int(magnet_id))

    for file_data in magnet_files:
        if "files" in file_data and isinstance(file_data["files"], list):
            extracted_files = extract_files(file_data["files"])

            print("\n✅ **Fichiers extraits :**")
            for file in extracted_files:
                print(f"📄 {file['filename']} ({file['size']} GB) ➜ {file['url']}")
