# -*- coding: utf-8 -*-

import os, sys
import re
import xml.etree.ElementTree as ET
import xml.dom.minidom

# Variablitas Gobalitas
Bagheera = 0
vacio = ''
hay = []
unitos = []
strang = "Nombre#RFC#serie#folio#con IVA#IVA#total#sin IVA#UUID#fechita#RFC receptor#descripción\n"
#salida = []
banderlog = False
cadena = ''

# Inicia rastreo de archivos en directorio
dirs = os.listdir()
for file in dirs:
    # print(file)
    hay.append(file)

'''
# hay[] tiene el directorio total.
# Ahora un arkabrita de salidita con el directorio
printear = input("si no deseas guardar solo da enter, o da un caracter ")
if printear != '':
    nambre = input('Dame el nombre del Arkabra de salida = ')
    if nambre == '':
        nambre = 'Horse with No Name'
    nambre = nambre + '.txt'
    print('el arKabra será = ', nambre)

    fh = open(nambre, "w")

    for i in range(len(hay)):
        cade = hay[i]
        cade = cade + '\n'
        fh.write(cade)

    fh.close()
'''

# Abre sección de llenado

# Inicia rastreo, si hay archivos .xml
for i in range(len(hay)):
    
    direct = []
    nombre = hay[i]
    #print('-A- nombre ArKabra.xlm = ',nombre)
    if nombre[-4:] == '.xml':
        unitos.append(nombre)
        banderlog = True
    else:
        banderlog = False
        # END IF

    if banderlog == True: # Si es .xml lo abrimos y lo metemos a datoides
        Bagheera = Bagheera + 1
        name = ''
        salida = []
        f = open(hay[i], 'r', encoding='utf-8')
        datoides = f.read()
        f.close
        
        # Limpiamos los / < y > del segmento
        for k in range(len(direct)):
            datoides = dadoides.replace('<', vacio)
            datoides = dadoides.replace('>', vacio)
            datoides = dadoides.replace('\\', vacio)
            datoides = dadoides.replace("'", vacio)
            datoides = dadoides.replace("Â\xa0", vacio)
            datoides = dadoides.replace("'", vacio)
                   
        # NEXT k
        
        info = datoides

        # Iniciamos extracción de datitos
        #print("-C-4- info = \n", info)

        buscar0 = re.compile('(\snombre=")([\w|\.|,|\s]+[\w|\s|\.|,]*)(["]{1})')
        Name = re.findall(buscar0, info, flags=0)
        if Name:
            for j in range(len(Name)):
                name = name + str(Name[j])
            # NEXT j
            name = name.replace('<', vacio)
            name = name.replace('>', vacio)
            name = name.replace('[', vacio)
            name = name.replace(']', vacio)
            name = name.replace('/', vacio)
            name = name.replace('"', vacio)
            name = name.replace("\\xa0", vacio)
            name = name.replace("\\", vacio)
            name = name.replace(")", vacio)
            name = name.replace("(", vacio)
            name = name.replace("',", vacio)
            name = name.replace("'", vacio)
            name = name.replace('nombre=', vacio)
            salida.append(name)
            salida.append('#')
        else:
            salida.append('No se findeo#')
        # END IF
        
        #print("-E- rfc")
        buscar1 = re.compile('(\srfc=")(?P<rfc>[A-Z]{3,4}[0-9]{2}[0-1][0-9][0-3][0-9][\w\d]{3})')
        RFC = re.search(buscar1, info)
        if RFC:
            Rfc = RFC.group('rfc')
            salida.append(Rfc)
            salida.append('#')
        
        buscar2 = re.compile('(\sserie=")(?P<serie>[\w1|\d]+)')
        Seri = re.search(buscar2, info)
        if Seri:
            serie = Seri.group('serie')
            salida.append(serie)
            salida.append('#')
        else:
            Serie = 'N/A'
            salida.append(Serie)
            salida.append('#')

        buscar3 = re.compile('(\sfolio=")(?P<foli>[\d]+)')
        Foli = re.search(buscar3, info)
        if Foli:
            folio = Foli.group('foli')
            salida.append(folio)
            salida.append('##')
        else:
            folio = 'Sin Folio'
            salida.append(folio)
            salida.append('##')

        buscar4 = re.compile('(\stotalImpuestosTrasladados=")(?P<trasla>[\d]*[\.]*[\d]*)')
        Tras = re.search(buscar4, info)
        if Tras:
            trasla = Tras.group('trasla')
            salida.append(trasla)
            salida.append('#')
        else:
            salida.append('0.0#')

        buscar5 = re.compile('(\stotal=")(?P<tot>[\d]*[\.]*[\d]*)')
        Total = re.search(buscar5, info)
        if Total:
            total = Total.group('tot')
            salida.append(total)
            salida.append(str(i))
            salida.append('##')
            print("Totalito = ", total)
        
        buscar6 = re.compile('(\sUUID=")(?P<uuid>([0-9a-fA-F]{8})-([0-9a-fA-F]{4})-([0-9a-fA-F]{4})-([0-9a-fA-F]{4})-([0-9a-fA-F]{12}))')
        UUID = re.search(buscar6, info)
        if UUID:
            Uuid = UUID.group('uuid')
            salida.append(Uuid)
            salida.append('#')

        buscar8 = re.compile('(fecha=")(?P<fecha>([0-9]{4})(-|/)([0-1]{1}[0-9]{1})(-|/)([0-3]{1}[0-9]{1}))')
        Fech = re.search(buscar8, info)
        if Fech:
            fechita = Fech.group('fecha')
            salida.append(fechita)
            salida.append('#')
        
        buscar9 = re.compile('(<cfdi:Receptor.*rfc=")(?P<rece>[A-Z]{3,4}[0-9]{2}[0-1][0-9][0-3][0-9][\w\d]{3})(")') #RFC receptor
        Rfcrece = re.search(buscar9, info)
        if Rfcrece:
            rrfc = Rfcrece.group('rece')
            salida.append(rrfc)
            salida.append('#')
        else:
            rrfc = 'No se encontro'
            salida.append(rrfc)
            salida.append('#')

        buscar7 = re.compile('(?<=descripcion=")(.+)(?="\s)')
        Descri = re.findall(buscar7, info)
        if Descri:
            desc = str(Descri)
            desc = desc.replace(")", vacio)
            desc = desc.replace("(", vacio)
            desc = desc.replace('"', vacio)
            desc = desc.replace(",", vacio)
            desc = desc.replace("'", vacio)
            desc = desc.replace('"', vacio)
            desc = desc.replace('[', vacio)
            desc = desc.replace(']', vacio)
            desc = desc.replace('#', vacio)
            desc = desc.replace('descripcion=', vacio)
            #print("-L- \n descripción es disc = ", desc)
            salida.append(desc)
            salida.append('\n')
        else:
            desc = 'No se findeo'
            salida.append(desc)
            salida.append('\n')
        
        # Salida a cadena para guardarla.
        
        #De salida a strang
        for j in range(len(salida)):
            strang = strang + str(salida[j])
        # NEXT j
        #print("\nsalida proc(S)esada >>>=====>>> ", strang)
        # Termina de llenar la salida.
        
    # END IF
# NEXT i


# Ahora un arkabrita de salidita, si hubo xml
if Bagheera > 1:
    print("Se pedirá archivo de salida para csv, si el archivo")
    print("Existe será EXTERMINDO y reemplazado por el nuevo,")
    print("Si está abierto por otra aplicación no se guardará")
    print("el resultado")
    nambre = input('Dame el nombre del Arkabra de salida = ')
    if nambre == '':
        nambre = 'Caballo-Sin-Nombre'

    buscar10 = re.compile('(<cfdi:Receptor rfc=")(?P<satan>[A-Z]{3,4}[0-9]{2}[0-1][0-9][0-3][0-9][\w\d]{3})')
    Satan = re.search(buscar10, info)
    if Satan:
        diablo = Satan.group('satan')
    else:
        diablo = 'No Encontrado'
    
    nambre = nambre + "_" + str(diablo) + '.csv'
    print('el arKabra será = ', nambre)

    try:
        fh = open(nambre, "w", encoding='utf-8')
        fh.write(strang,)
        fh.close()
    except IOError as error:
        print("arhcivo abierto u otra bronca")
        print("NO SE GUARDÓ")
        sys.exit(1)
else:
    print("No había .xmls, no se hizo nada")

print("Se procesaron = ", Bagheera, " ArKabras")

print("Terminamitos \n")

    
    
    
