"""Slug ÚNICO do casamento — usado por TODOS os scripts do pipeline (run_dozero.sh, auto_decupagem,
sync_ingest, scene_judge, placements) pra o nome de arquivo/pasta bater sempre. Antes cada script
derivava sozinho (casamento.split()[0] = '#editar#') e os nomes não casavam."""
import os, re, unicodedata


def slug(name):
    """'#EDITAR# Casamento Verônica e Murilo' -> 'editar-casamento-veronica-e-murilo' (mesma regra
    do run_dozero.sh: NFD + só a-z0-9 -> hífen)."""
    s = "".join(c for c in unicodedata.normalize("NFD", name) if unicodedata.category(c) != "Mn")
    return re.sub(r"-+$", "", re.sub(r"^-+", "", re.sub(r"[^a-z0-9]+", "-", s.lower())))


def from_path(path):
    """Slug a partir de um nome de arquivo do pipeline: decupagem_<slug>.json ou
    placements_<slug>_<momento>.json. None se não reconhecer."""
    b = os.path.basename(path)
    m = re.match(r"decupagem_(.+)\.json$", b) or re.match(r"placements_(.+?)_[a-z]+\.json$", b)
    return m.group(1) if m else None
