#!/usr/bin/env python3.8

'''
Copyright 2021 Erwin Andres Espitia Torres
This program is free software: you can redistribute it and/or modify
it under the terms of the GNU General Public License as published by
the Free Software Foundation, either version 3 of the License, or
(at your option) any later version.

This program is distributed in the hope that it will be useful,
but WITHOUT ANY WARRANTY; without even the implied warranty of
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
GNU General Public License for more details.

You should have received a copy of the GNU General Public License
along with this program.  If not, see <http://www.gnu.org/licenses/>.
'''

import re

linea_x = 0
linea_y = 0

#FUNCION
def extrae_id_rectangulos():
    umbral = 0
    rectangulos = []
    archivo_svg = open('dibujo.svg', 'r')

    for rectangulo in archivo_svg:
        #VERIFICAMOS SI LLEGAMOS AL TAG <g
        if '<g' in rectangulo:
            umbral = 'si'

        if umbral == 'si':
            if 'url' in rectangulo:
                pass
            else:
                #EXTRAEMOS LOS id DE LOS RECTANGULOS
                busca_rec = re.search(r"\bvariable\S+", rectangulo)
                if busca_rec != None:
                    group = busca_rec.group()
                    #DEPURAMOS LOS ids ENCONTRADOS,QUITANDOLE LAS COMILLAS Y LOS PARENTESIS ANGULARES
                    depurado = group.replace('"', '')
                    depurado2 = depurado.replace('>', '')
                    #NOS ASEGURAMOS QUE EL OBJETO A ENLISTAR SEA UN id
                    if re.search('[0-9]', depurado2):
                        rectangulos.append(depurado2)
                        #print(rectangulos)

    archivo_svg.close()
    return rectangulos

print('id VARIABLES: ')
print(extrae_id_rectangulos())

#FUNCION
def extrae_id_texto():
    umbral = 0
    textos = []
    archivo_svg = open('dibujo.svg', 'r')

    for texto in archivo_svg:
        #VERIFICAMOS SI LLEGAMOS AL TAG <g
        if '<g' in texto:
            umbral = 'si'

        if umbral == 'si':
            #EXTRAEMOS LOS id DE LOS RECTANGULOS
            busca_rec = re.search(r"\btext\d\S+", texto)
            if busca_rec != None:
                group = busca_rec.group()
                #DEPURAMOS LOS ids ENCONTRADOS,QUITANDOLE LAS COMILLAS Y LOS PARENTESIS ANGULARES
                depurado = group.replace('"', '')
                depurado2 = depurado.replace('>', '')
                #NOS ASEGURAMOS QUE EL OBJETO A ENLISTAR SEA UN id
                if re.search('[0-9]', depurado2):
                    textos.append(depurado2)
                    #print(rectangulos)

    archivo_svg.close()
    return textos

print('\nid TEXTOS: ')
print(extrae_id_texto())


#FUNCION
def extrae_objetos():
    ids_rectangulos = extrae_id_rectangulos()
    archivo_svg = open('dibujo.svg', 'r')

    umbral = 0
    conteo_lineas = 0
    archivo_total=open('dibujo.svg', 'r')
    #GENERAMOS EL TOTAL DE LINEAS DEL ARCHIVO PARA USARLO COMO REFERENCIA PARA UBICAR LOS TAGS RESPECTIVOS AL EJE X y EJE Y
    total_lineas=len(archivo_total.readlines())

    archivo=open('dibujo.svg')
    total_lineas2=archivo.readlines()
    #total_lineas2=archivo_svg.readlines()

    objetos = []
    contenedor = []

    for rect in ids_rectangulos:
        for rectls in archivo_svg:
            conteo_lineas = conteo_lineas + 1
        #VERIFICAMOS SI LLEGAMOS AL TAG <g
            if rect in rectls:
                umbral = 'si'

            if umbral == 'si':
                #print(rect)
                if rect in rectls:
                    ubicaX = conteo_lineas + 2
                    ubicaY = conteo_lineas + 3
                    ubicaTitulo = conteo_lineas + 7
                    '''
                    print(rect)
                    print(str(re.search('\d{1,9}', total_lineas2[ejeX]).group()))
                    print(str(re.search('\d{1,9}', total_lineas2[ejeY]).group()))
                    '''
                    ejeX = re.search('\d{1,9}', total_lineas2[ubicaX])
                    ejeY = re.search('\d{1,9}', total_lineas2[ubicaY])

                    if ejeX != None:
                        ejeX = ejeX.group()
                    if ejeY != None:
                        ejeY = ejeY.group()

                    #OBTENEMOS EL TITULO DEL OBJETO QUE ESTÁ ENTRE LOS PARENTESIS ANGULARES > Titulo <
                    Titulo = re.search('>[^"]*<', total_lineas2[ubicaTitulo]).group()
                    #VERIFICAMOS QUE REALMENTE ES EL TITULO Y NO OTRA COSA QUE SE HAYA PUESTO ANTES DEL TITULO
                    if 'fin-' in Titulo:
                        ubicaTitulo = conteo_lineas + 5
                        Titulo = re.search('>[^"]*<', total_lineas2[ubicaTitulo]).group()

                    depuraTitulo = Titulo.replace('>', '')
                    Titulo = depuraTitulo.replace('<', '')

                    objetos = [rect, ejeX, ejeY, Titulo]
                    contenedor.append(objetos)

                if '>fin-var<' in rectls:
                    break

    archivo_svg.close()
    return contenedor


print('\nVARIABLES: ')
print(extrae_objetos())


#FUNCION
def extrae_textos():
    umbral = 0
    ids_textos = extrae_id_texto()
    archivo_svg2 = open('dibujo.svg', 'r')

    conteo_lineas = 0
    archivo_total=open('dibujo.svg', 'r')
    #GENERAMOS EL TOTAL DE LINEAS DEL ARCHIVO PARA USARLO COMO REFERENCIA PARA UBICAR LOS TAGS RESPECTIVOS AL EJE X y EJE Y
    total_lineas=len(archivo_total.readlines())

    archivo=open('dibujo.svg')
    total_lineas2=archivo.readlines()
    #total_lineas2=archivo_svg.readlines()

    objetos = []
    contenedor = []

    for cuadros_textos in ids_textos:
        for rec_texto in archivo_svg2:
            conteo_lineas = conteo_lineas + 1
            #NOS ASEGURAMOS QUE COMIENCE EN CUADROS QUE DEFINIMOSCOMO COMO TEXTOS (text'id')
            if cuadros_textos in rec_texto:
                umbral = 'si'

            if umbral == 'si':
                if cuadros_textos in rec_texto:
                    ubicaX = conteo_lineas + 2
                    ubicaY = conteo_lineas + 3
                    ubicaTitulo = conteo_lineas + 7
                    '''
                    print(cuadros_textos)
                    print(str(total_lineas2[ubicaX]))
                    print(str(total_lineas2[ubicaY]))
                    '''
                    ejeX = re.search('\d{1,9}', total_lineas2[ubicaX])
                    ejeY = re.search('\d{1,9}', total_lineas2[ubicaY])

                    if ejeX != None:
                        ejeX = ejeX.group()
                    if ejeY != None:
                        ejeY = ejeY.group()

                    #OBTENEMOS EL TITULO DEL OBJETO QUE ESTÁ ENTRE LOS PARENTESIS ANGULARES > Titulo <
                    Titulo = re.search('>[^"]*<', total_lineas2[ubicaTitulo]).group()
                    #VERIFICAMOS QUE REALMENTE ES EL TITULO Y NO OTRA COSA QUE SE HAYA PUESTO ANTES DEL TITULO
                    if 'fin-' in Titulo:
                        ubicaTitulo = conteo_lineas + 5
                        Titulo = re.search('>[^"]*<', total_lineas2[ubicaTitulo]).group()

                    depuraTitulo = Titulo.replace('>', '')
                    Titulo = depuraTitulo.replace('<', '')

                    objetos = [cuadros_textos, ejeX, ejeY, Titulo]
                    contenedor.append(objetos)

                if '>fin-text<' in rec_texto:
                    break

    #archivo_svg.close()
    return contenedor


print('\nTEXTOS: ')
print(extrae_textos())

''' QUEMAMOS EL PHP '''

encabezado_php = "<?php\ninclude('fpdf/code128.php');\n\n$pdf=new PDF_Code128('L','mm',array(150,100));\n$pdf->AddPage();\n$pdf->SetAutoPageBreak(true, 3);\n\n"
piedepagina_php = "$pdf->Output('F', 'codigos.pdf');\n\n ?>\n"
cuerpo = ''
variables = ''

#EXTRAEMOS LOS CADA UNO DE LOS OBJETOS
for variable in extrae_objetos():
    print(variable)
    id = variable[0]
    X = variable[1]
    Y = variable[2]
    nombreVariable = variable[3]

    variables = '$'+nombreVariable+'='+'"hola mundo";\n' + str(variables)

    formato_variable = "$pdf->SetFont('Arial','B',14);"
    variable = "$pdf->Write(5,''.$"+nombreVariable+".'');\n"
    cuerpo = "$pdf->setXY("+str(X)+","+str(Y)+");\n" + str(formato_variable+'\n') + str(variable+'\n') + str(cuerpo)


for elemento in extrae_textos():
    print(elemento)
    id = elemento[0]
    X = elemento[1]
    Y = elemento[2]
    etiqueta = elemento[3]

    formato_texto = "$pdf->SetFont('Arial','B',14);"
    texto = "$pdf->Write(5,''."+etiqueta+".'');\n"
    cuerpo = "$pdf->setXY("+str(X)+","+str(Y)+");\n" + str(formato_texto+'\n') + str(texto+'\n') + str(cuerpo)


#cuerpo = 'hola'
f = open('genera_pdf.php', 'w+')
f.write(encabezado_php+variables+'\n\n'+cuerpo+piedepagina_php)
f.close()
