#!/usr/bin/env catnip
# Manipulation de fichiers et chemins avec pathlib
# pathlib fournit une API orientée objet pour les chemins de fichiers

pathlib = import('pathlib')
tempfile = import('tempfile')
shutil = import('shutil')

# Création de chemins

home = pathlib.Path.home()
cwd = pathlib.Path.cwd()

print("⇒ Chemins de base")
print("  Home:", home)
print("  CWD:", cwd)

# Création de chemins relatifs et absolus
docs = pathlib.Path("docs")
readme = docs / "README.md"

print()
print("⇒ Construction de chemins")
print("  Relatif:", docs)
print("  Composé:", readme)
print("  Absolu:", readme.resolve())

# Inspection de chemins
# META.file = chemin du script courant (indépendant du CWD)

test_path = pathlib.Path(META.file)

print()
print("⇒ Décomposition d'un chemin")
print("  Chemin:", test_path)
print("  Parent:", test_path.parent)
print("  Nom:", test_path.name)
print("  Stem:", test_path.stem)
print("  Suffixe:", test_path.suffix)
print("  Parts:", test_path.parts)

# Tests d'existence

script_dir = test_path.parent

print()
print("⇒ Tests d'existence")
print("  Dossier du script existe:", script_dir.exists())
print("  Est un dossier:", script_dir.is_dir())
print("  Est un fichier:", test_path.is_file())
print("  fake.txt existe:", (script_dir / "fake.txt").exists())

# Lecture de fichier

print()
print("⇒ Lecture de fichier")
content = test_path.read_text()
lines = content.split("\n")
print("  Lignes totales:", len(lines))
print("  Première ligne:", lines[0])

# Fichier introuvable

print()
print("⇒ Fichier introuvable")
try {
    pathlib.Path("/tmp/does_not_exist.txt").read_text()
} except {
    e: RuntimeError => { print("  Attrapé:", e) }
}

# Création de dossier temporaire

temp_dir = pathlib.Path(tempfile.mkdtemp())

print()
print("⇒ Dossier temporaire créé")
print("  Chemin:", temp_dir)

# Écriture d'un fichier
test_file = temp_dir / "test.txt"
test_file.write_text("Hello from Catnip!")

print()
print("⇒ Écriture de fichier")
print("  Fichier créé:", test_file.exists())
print("  Contenu:", test_file.read_text())

# Créer une sous-arborescence
subdir = temp_dir / "data" / "2024"
subdir.mkdir(parents=True)
print()
print("⇒ Création de sous-dossiers")
print("  data/2024/ créé:", subdir.exists())

# Itération sur un dossier

print()
print("⇒ Contenu du dossier temp")
for item in temp_dir.iterdir() {
    type_str = if item.is_dir() { "DIR" } else { "FILE" }
    print("  [" + type_str + "]", item.name)
}

# Nettoyage

shutil.rmtree(str(temp_dir))
print()
print("⇒ Nettoyage effectué")
print("  Temp supprimé:", not temp_dir.exists())