import os
import subprocess

import dicttoxml as dicttoxml
from xml.dom.minidom import parseString
from xadessri import sign_xml
import zeep

data = {
    'factura': {
        'infoTributaria': {
            'ambiente': 1,
            'tipoEmision': 1,
            'razonSocial': 'URDIN GONZALEZ JOHNNY EDGAR',
            'ruc': '0703886697001',
            'claveAcceso': '2706202401070388669700110010010000020011000000011',
            'codDoc': '01',
            'estab': '001',
            'ptoEmi': '001',
            'secuencial': '000002000',
            'dirMatriz': 'Panamericana y Carchi',
            'contribuyenteRimpe': 'CONTRIBUYENTE RÉGIMEN RIMPE',
        },
        'infoFactura': {
            'fechaEmision': '27/06/2024',
            'dirEstablecimiento': 'Panamericana y Carchi',
            'obligadoContabilidad': 'NO',
            'tipoIdentificacionComprador': '05',
            'razonSocialComprador': 'HEREDIA GALARZA VICTOR QUERUBIN',
            'identificacionComprador': '0702252669',
            'direccionComprador': 'EL GUABO',
            'totalSinImpuestos': 7.00,
            'totalDescuento': '0.00',
            'totalConImpuestos': {
                'totalImpuesto': {
                    'codigo': 2,
                    'codigoPorcentaje': 6,
                    'baseImponible': 7.00,
                    'valor': 0.00,
                },
            },
            'propina': 0,
            'importeTotal': 7.00,
            'moneda': 'DOLAR',
            'pagos': {
                'pago': {
                    'formaPago': 20,
                    'total': 7.00,
                }
            }

        },
        'detalles': {
            'detalle': {
                'codigoPrincipal': 'REC-020',
                'descripcion': 'STICKER REVISION VEHICULAR',
                'cantidad': 1.0,
                'precioUnitario': 5.0,
                'descuento': 0,
                'precioTotalSinImpuesto': 5,
                'impuestos': {
                    'impuesto': {
                        'codigo': 2,
                        'codigoPorcentaje': 6,
                        'tarifa': 0.0,
                        'baseImponible': 5,
                        'valor': 0,

                    }
                }
            }
        },
        'infoAdicional': {
            '@Teléfono': '0920041052',
            '@Email': 'victor_galarza1968@hotmail.com',
            '@Concepto': 'STICKER DEL VEHICULO DE PLACAS PTF0916',
            '@No. Orden': 'CRTV00000001218',
        }
    }
}
documento='2706202401070388669700110010010000020031000000013'
xml = dicttoxml.dicttoxml(data, root=False, ids=False, attr_type=False, encoding='utf-8')
xml = parseString(xml).toprettyxml().replace('<factura>', '<factura id="comprobante" version="1.1.0">')\
    .replace('key','campoAdicional').replace('name', 'nombre').replace('@T','T').replace("@E",'E')\
    .replace("@C",'C').replace("@N",'N')
archivo = open(documento+'.xml', 'w', encoding='utf-8')
archivo.write(xml)
archivo.close()
ruta_principal=os.path.dirname(os.path.abspath(__file__))

ruta_p12 = os.path.join(ruta_principal,'0703886697.p12')

clave_p12 = 'johnny1987'
ruta_xml = os.path.join(ruta_principal,documento+'.xml')
ruta_salida=os.path.join(ruta_principal,'firmado')
archivo =documento+'.xml'
ruta_jar=os.path.join(ruta_principal,'comprobantes.jar')
cmd_ej=f'java -jar {ruta_jar} {ruta_xml} {ruta_p12} {clave_p12} {ruta_salida} {archivo}'

print(cmd_ej)
subprocess.call(args=cmd_ej)



# from xades_bes_sri_ec import xades
#
# ruta_p12 = '/ruta_absoluta_a_p12'
# clave_p12 = 'clave_archivo_p12'
# ruta_xml = '/ruta_absoluta_xml_a_firmar'
# ruta_xml_auth = '/ruta_absoluta_xml_firmado'
#
# ruta_xml_firmado = xades.firmar_comprobante(ruta_p12, clave_p12, ruta_xml, ruta_xml_auth)
# with open(ruta_p12, mode="rb")  as file: # bytes
#     p12=file.read()
# signed = sign_xml(p12, clave_p12, xml)
# archivo = open(ruta_xml + ruta_xml_auth, 'w', encoding='utf-8')
# archivo.write(signed)
# archivo.close()
# print("signed: ", signed)

ambiente_pruebas_consulta='https://celcer.sri.gob.ec/comprobantes-electronicos-ws/AutorizacionComprobantesOffline?wsdl'
ambiente_pruebas_envio='https://celcer.sri.gob.ec/comprobantes-electronicos-ws/RecepcionComprobantesOffline?wsdl'

def enviar_sri(ambiente:int):
    url=""
    if ambiente==1: #ambiente de pruebas
        print('Ambiente de pruebas')
        url='https://celcer.sri.gob.ec/comprobantes-electronicos-ws/RecepcionComprobantesOffline?wsdl' #ruta al servidor de pruebas
    # elif int(ambiente)==2:
    #     print('Ambiente de produccion')
    #     url='https://cel.sri.gob.ec/comprobantes-electronicos-ws/RecepcionComprobantesOffline?wsdl'
    archivo=os.path.join('firmado',documento+'.xml')
    comprobante=open(archivo, "rb") #apertura del archivo xml
    xmlBytes = comprobante.read()# creando mapa de bits del comprobante
    client = zeep.Client(wsdl=url)#creando una instancia de zeep cliente
    print("Inicia el proceso de envio..!!")
    result=client.service.validarComprobante(xmlBytes)
    print(result)
    print("Finaliza el envio..!")
    jsonarchivo=open(documento+'.json',"w")
    jsonarchivo.write(str(result))
    jsonarchivo.close()

def consultar_envio():
    url = ambiente_pruebas_consulta
    client = zeep.Client(wsdl=url)
    respuesta=client.service.autorizacionComprobante(documento)
    print(respuesta)
    jsonarchivo = open(documento+'.json', "w")
    jsonarchivo.write(str(respuesta))
    jsonarchivo.close()
enviar_sri(1)
consultar_envio()