"""Confere que cada arquivo bruto ainda é idêntico ao registrado no manifesto (SHA-256).

Uso:
    python3 scripts/verificar_brutos.py

Sai com erro se algum arquivo sumiu ou mudou. Arquivos fora do git (PDFs, D-020)
contam como ausentes até serem baixados de novo pela URL do manifesto.
"""

import hashlib
import sys

from comum import BRUTOS, ler_csv

ok, ausentes, alterados = 0, [], []
for manifesto in sorted(BRUTOS.glob("*/manifesto.csv")):
    for linha in ler_csv(manifesto):
        caminho = manifesto.parent / linha["arquivo"]
        if not caminho.exists():
            ausentes.append(f"{manifesto.parent.name}/{linha['arquivo']}  ({linha['consulta_url']})")
        elif hashlib.sha256(caminho.read_bytes()).hexdigest() != linha["sha256"]:
            alterados.append(f"{manifesto.parent.name}/{linha['arquivo']}")
        else:
            ok += 1
print(f"{ok} arquivos conferem com o manifesto")
for titulo, lista in (("Ausentes", ausentes), ("ALTERADOS", alterados)):
    if lista:
        print(f"{titulo} ({len(lista)}):")
        for item in lista:
            print("  " + item)
sys.exit(1 if alterados else 0)
