#!/usr/bin/env python3
import os
from pathlib import Path
import inquirer

SIZE_THRESHOLD = 100 * 1024 * 1024  # 100 Mo


def choisir_repertoire_depart(base_path: Path) -> Path:
    """
    Navigation interactive dans l'arborescence avec inquirer.
    On descend dossier par dossier jusqu'à ce que l'utilisateur choisisse 'Sélectionner ce dossier'.
    """
    current = base_path

    while True:
        # Liste des sous-dossiers
        subdirs = [d for d in current.iterdir() if d.is_dir()]

        choices = ["📁 Sélectionner ce dossier"] + [d.name for d in subdirs] + ["⬅️ Remonter"]

        q = [
            inquirer.List(
                "choice",
                message=f"Où veux-tu aller ? (Actuel: {current})",
                choices=choices
            )
        ]

        answer = inquirer.prompt(q)
        if not answer:
            return current

        choice = answer["choice"]

        # Choix valider ce dossier
        if choice == "📁 Sélectionner ce dossier":
            return current

        # Remonter
        if choice == "⬅️ Remonter":
            if current == base_path:
                print("Impossible de remonter plus haut.")
            else:
                current = current.parent
            continue

        # Descendre
        new_dir = current / choice
        if new_dir.is_dir():
            current = new_dir


def choisir_sous_dossiers(folder: Path):
    """Permet de choisir plusieurs sous-dossiers via une checkbox."""
    dirs = [d for d in folder.iterdir() if d.is_dir()]

    if not dirs:
        print("Ce dossier ne contient aucun sous-dossier.")
        return []

    choices = [str(d) for d in dirs]

    q = [
        inquirer.Checkbox(
            "selected",
            message="Sélectionne les sous-dossiers à analyser",
            choices=choices
        )
    ]

    answers = inquirer.prompt(q)
    return [Path(d) for d in answers.get("selected", [])]


def scan_mkv(dirs):
    small = []

    for d in dirs:
        print(f"\n--- Analyse de {d} ---")

        for mkv in d.rglob("*.mkv"):
            try:
                size = mkv.stat().st_size
            except:
                continue

            if size < SIZE_THRESHOLD:
                small.append(mkv)
                print(f"[<100 Mo] {mkv} — {size / (1024*1024):.2f} Mo")

    if not small:
        print("\nAucun fichier mkv < 100 Mo trouvé.")
    else:
        print(f"\nTotal : {len(small)} fichiers problématiques trouvés.")


def main():
    base = Path("Z:/")

    print("=== Navigation jusqu'au dossier voulu ===")
    selected_folder = choisir_repertoire_depart(base)

    print(f"\nDossier choisi : {selected_folder}")

    print("\n=== Sélection des sous-dossiers ===")
    selected_subdirs = choisir_sous_dossiers(selected_folder)

    if not selected_subdirs:
        print("Aucun sous-dossier sélectionné.")
        return

    print("\n=== Scan des fichiers MKV ===")
    scan_mkv(selected_subdirs)


if __name__ == "__main__":
    main()
