"""Petits utilitaires partages (slug, noms de fichiers surs)."""
from __future__ import annotations

import re
import unicodedata

_SLUG_STRIP = re.compile(r"[^a-z0-9]+")
_FS_UNSAFE = re.compile(r'[<>:"/\\|?*\x00-\x1f]')


def slugify(text: str) -> str:
    """Slug ascii minuscule, utilise pour les identifiants de dossiers internes."""
    norm = unicodedata.normalize("NFKD", text)
    norm = norm.encode("ascii", "ignore").decode("ascii").lower()
    return _SLUG_STRIP.sub("-", norm).strip("-") or "livre"


def safe_filename(name: str) -> str:
    """Nettoie un nom de fichier en conservant les accents (sortie utilisateur)."""
    name = _FS_UNSAFE.sub("", name).strip()
    name = re.sub(r"\s+", " ", name)
    return name or "sans-titre"
