"""
Roda o pipeline mensal completo: download → ETL → upsert Postgres → limpeza local.

Uso:
    python run_monthly.py 2026-07
"""
import shutil
import sys
import subprocess
from pathlib import Path

REPO_ROOT = Path(__file__).resolve().parent


def limpar_arquivos_locais(mes_ano: str):
    """Remove CSVs extraídos e ZIPs baixados após ETL bem-sucedido."""
    extraidos = REPO_ROOT / "data" / "extracted" / mes_ano
    downloads = REPO_ROOT / "data" / "raw" / mes_ano

    for pasta in (extraidos, downloads):
        if pasta.exists():
            shutil.rmtree(pasta)
            print(f"[limpeza] removido: {pasta}")


def main():
    if len(sys.argv) != 2:
        print("Uso: python run_monthly.py AAAA-MM   (ex: 2026-07)")
        sys.exit(1)

    mes_ano = sys.argv[1]
    python = str(Path(sys.executable))

    etapas = [
        ("Download RFB",          [python, "-m", "cnpj_monitor.download_rfb", mes_ano]),
        ("ETL + upsert Postgres", [python, "-m", "cnpj_monitor.etl_load",     mes_ano]),
    ]

    for titulo, cmd in etapas:
        print(f"\n== {titulo} ({mes_ano}) ==")
        resultado = subprocess.run(cmd)
        if resultado.returncode != 0:
            print(f"\n[erro] Pipeline interrompido em: {titulo} (exit {resultado.returncode})")
            sys.exit(resultado.returncode)

    print("\n== Limpeza local ==")
    limpar_arquivos_locais(mes_ano)

    rodada = f"{mes_ano}-01"
    print(f"""
== Concluído ==
Para ver os novos CNPJs desta rodada, execute query_novos.sql no banco
com a data ajustada para: {rodada}
""")


if __name__ == "__main__":
    main()
