import requests
import json
from guessit import guessit
from datetime import datetime
import time

# ✅ Configuration des API
ALLDEBRID_API_KEY = "lUCRvOPYXci0DOVAz61u"
TMDB_API_KEY = "ff2a5e4ba27621d899afc6c49a2040e9"
JSON_FILE = "films.json"
PROXY_BASE_URL = "http://ibo.plex-stream.net/darki/V2/Films/debrid.php?id="
TMDB_IMAGE_BASE_URL = "https://image.tmdb.org/t/p/original"

# ✅ Nombre de tentatives max pour une requête
MAX_RETRIES = 3

# ✅ Extraire les métadonnées du fichier avec GuessIt
def extract_metadata(filename):
    guess = guessit(filename)
    title = guess.get("title", "Inconnu")
    year = guess.get("year", "Inconnue")
    quality = guess.get("screen_size", "Inconnue")
    return title, year, quality

# ✅ Fonction pour gérer les requêtes avec retries
def make_request(url, headers=None, params=None, timeout=5):
    for attempt in range(MAX_RETRIES):
        try:
            response = requests.get(url, headers=headers, params=params, timeout=timeout)
            response.raise_for_status()
            return response.json()
        except requests.exceptions.RequestException as e:
            print(f"⚠️ Erreur de connexion ({url}) : {e} (tentative {attempt+1}/{MAX_RETRIES})")
            time.sleep(2)
    return None

# ✅ Récupérer les infos du film via TMDb
def get_movie_info(title):
    url = "https://api.themoviedb.org/3/search/movie"
    params = {"api_key": TMDB_API_KEY, "query": title}
    data = make_request(url, params=params)

    if data and "results" in data and data["results"]:
        movie = data["results"][0]
        poster_url = f"{TMDB_IMAGE_BASE_URL}{movie['poster_path']}" if movie.get("poster_path") else None
        genre_ids = movie.get("genre_ids", [])

        # ✅ Récupérer les genres via TMDb
        genres = get_movie_genres(genre_ids)

        return {
            "id": movie["id"],
            "title": movie["title"],
            "release_date": movie.get("release_date", "Inconnue"),
            "poster_url": poster_url,
            "genres": genres
        }
    return None

# ✅ Récupérer les genres à partir des IDs
def get_movie_genres(genre_ids):
    url = "https://api.themoviedb.org/3/genre/movie/list"
    params = {"api_key": TMDB_API_KEY}
    data = make_request(url, params=params)

    if data and "genres" in data:
        genre_dict = {genre["id"]: genre["name"] for genre in data["genres"]}
        return [genre_dict.get(genre_id, "Inconnu") for genre_id in genre_ids]
    return ["Inconnu"]

# ✅ Récupérer les liens AllDebrid
def get_alldebrid_links():
    url = "https://api.alldebrid.com/v4/user/links"
    headers = {"Authorization": f"Bearer {ALLDEBRID_API_KEY}"}
    data = make_request(url, headers)

    if data and "data" in data and "links" in data["data"]:
        links = data["data"]["links"]
        
        # 🚀 Correction des liens mal formés (supprimer "http://https://")
        for link in links:
            link["link"] = link["link"].replace("http://https://", "https://")

        print("🔎 Liens récupérés depuis AllDebrid :", json.dumps(links, indent=4, ensure_ascii=False))
        return links

    print("❌ Aucun lien débridé trouvé.")
    return []

# ✅ Générer et enregistrer le JSON
def generate_json():
    links = get_alldebrid_links()
    if not links:
        print("❌ Aucun lien trouvé dans AllDebrid.")
        return

    films = []
    for link in links:
        filename = link["filename"]
        clean_link = link["link"]
        file_id = clean_link.split("/")[-1]
        proxy_link = f"{PROXY_BASE_URL}{file_id}"

        # 🔍 Extraction des métadonnées avec GuessIt
        title, year, quality = extract_metadata(filename)

        # 🔍 Recherche du film sur TMDb
        movie_info = get_movie_info(title)
        poster_url = movie_info["poster_url"] if movie_info else None
        genres = movie_info["genres"] if movie_info else ["Inconnu"]

        films.append({
            "category": "film",
            "tmdb_id": movie_info["id"] if movie_info else None,
            "title": movie_info["title"] if movie_info else title,
            "playlist": None,
            "year": movie_info["release_date"][:4] if movie_info and "release_date" in movie_info else year,
            "poster_url": poster_url,
            "genres": genres,  # ✅ Ajout des genres
            "qualities": [quality],
            "urls": [proxy_link],
            "date_added": datetime.now().strftime("%Y-%m-%d %H:%M:%S")
        })

    with open(JSON_FILE, "w", encoding="utf-8") as f:
        json.dump({"status": "success", "films": films}, f, indent=4)

    print("✅ Fichier JSON généré avec succès !")

# ✅ Exécuter le script
if __name__ == "__main__":
    generate_json()
    with open(JSON_FILE, "r", encoding="utf-8") as f:
        print(f.read())
