"""Assinatura local com A1 injetado; sem transmissão, consulta ou rede fiscal.

A fixture é sintética e não possui valor fiscal. Este exemplo exige runtime
e material A1 em armazenamento protegido; os testes da documentação o simulam.
"""
import argparse
import json
from pathlib import Path

from acbr import AcbrError, Emissor
from a1_config import carregar_configuracao
from contrato_offline import carregar_documento


def main() -> int:
    parser = argparse.ArgumentParser(description=__doc__)
    parser.add_argument("--runtime", type=Path, required=True)
    args = parser.parse_args()
    try:
        config = carregar_configuracao()  # Sempre ambiente=2, identificação zerada.
        with Emissor(config, runtime_directory=args.runtime, timeout=30) as emissor:
            geracao = emissor.gerar_xml(carregar_documento())
            print(json.dumps(geracao.to_dict(), ensure_ascii=False))
            if not geracao.sucesso or geracao.xml is None:
                return 1
            assinatura = emissor.assinar(geracao.xml)
            print(json.dumps(assinatura.to_dict(), ensure_ascii=False))
            if not assinatura.sucesso or assinatura.xml is None:
                return 1
            validacao = emissor.validar(assinatura.xml)
            print(json.dumps(validacao.to_dict(), ensure_ascii=False))
            return 0 if validacao.sucesso else 2
    except AcbrError as erro:
        print(json.dumps(erro.diagnostico.to_dict(), ensure_ascii=False))
        return 1
    except (OSError, ValueError):
        print("CONFIGURACAO_A1_INDISPONIVEL: confira segredos e arquivo protegido.")
        return 1


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