"""Contrôle une colonne d'identifiant dans un petit export CSV."""

import csv
import sys
from collections import Counter
from pathlib import Path


def controler(chemin: Path, colonne: str) -> int:
    with chemin.open(encoding="utf-8-sig", newline="") as fichier:
        lecteur = csv.DictReader(fichier)
        if lecteur.fieldnames is None or colonne not in lecteur.fieldnames:
            entetes = ", ".join(lecteur.fieldnames or []) or "aucune"
            print(f"ECHEC : colonne {colonne!r} absente (en-têtes : {entetes})")
            return 2
        entetes_repetes = sorted(
            nom for nom, total in Counter(lecteur.fieldnames).items() if total > 1
        )
        if entetes_repetes:
            print("ECHEC : en-têtes répétés : " + ", ".join(entetes_repetes))
            print("Chaque colonne doit avoir un nom unique avant le contrôle.")
            return 2
        lignes = list(lecteur)

    valeurs = [(ligne[colonne] or "").strip() for ligne in lignes]
    renseignes = [valeur for valeur in valeurs if valeur]
    comptes = Counter(renseignes)
    doublons = sorted(valeur for valeur, total in comptes.items() if total > 1)

    print(f"fichier : {chemin.name}")
    print(f"lignes : {len(lignes)}")
    print(f"identifiants renseignés : {len(renseignes)}")
    print(f"identifiants distincts : {len(comptes)}")
    print(f"lignes sans identifiant : {len(lignes) - len(renseignes)}")
    print("identifiants répétés : " + (", ".join(doublons) if doublons else "aucun"))

    valide = len(lignes) == len(renseignes) == len(comptes)
    print("CONTRÔLE : " + ("OK" if valide else "ECHEC"))
    return 0 if valide else 1


def main() -> int:
    if len(sys.argv) != 3:
        print("Usage : py controler_identifiant.py FICHIER.csv COLONNE")
        return 2
    return controler(Path(sys.argv[1]), sys.argv[2])


if __name__ == "__main__":
    raise SystemExit(main())
