"""Générer, extraire et valider un document Factur-X dans votre environnement local."""
import argparse
from pathlib import Path
from facturx import generate_from_file, get_xml_from_pdf, xml_check_xsd, xml_check_schematron

def main():
    p=argparse.ArgumentParser(description=__doc__)
    subs=p.add_subparsers(dest='action',required=True)
    g=subs.add_parser('generer');g.add_argument('pdf');g.add_argument('xml');g.add_argument('sortie')
    v=subs.add_parser('valider');v.add_argument('fichier')
    e=subs.add_parser('extraire');e.add_argument('pdf');e.add_argument('sortie')
    a=p.parse_args()
    if a.action=='generer':
        if Path(a.sortie).resolve() in [Path(a.pdf).resolve(),Path(a.xml).resolve()]:p.error('Utilisez un fichier de sortie différent des entrées.')
        if Path(a.sortie).exists():p.error('Le fichier de sortie existe déjà.')
        generate_from_file(a.pdf,a.xml,output_pdf_file=a.sortie,check_xsd=True,check_schematron=True)
        print('Fichier généré. XML contrôlé par XSD et Schematron. Vérifiez séparément PDF/A, concordance PDF/XML et traitement ERP.')
    elif a.action=='valider':
        if Path(a.fichier).suffix.lower()=='.pdf':
            with open(a.fichier,'rb') as f:_,xml=get_xml_from_pdf(f,check_xsd=True,check_schematron=True)
        else:
            xml=Path(a.fichier).read_bytes();xml_check_xsd(xml);xml_check_schematron(xml)
        print('XML valide selon les contrôles XSD et Schematron de la bibliothèque installée. Le conteneur PDF/A et la conformité fiscale complète ne sont pas évalués.')
    else:
        if Path(a.sortie).exists():p.error('Le fichier de sortie existe déjà.')
        with open(a.pdf,'rb') as f:_,xml=get_xml_from_pdf(f,check_xsd=True,check_schematron=True)
        Path(a.sortie).write_bytes(xml);print('XML extrait et contrôlé.')

if __name__=='__main__':main()
