import re

def process_dump(input_file, out_estructura, out_instalacion):
    TABLAS_DATOS = {
        "clientes", "usuarios", "usuarios_sitios_roles", "sitios",
        "monedas", "cat_tipos_documento", "cat_clasif_proveedor", "cat_impuestos",
        "tipos_cambio", "paises", "bancos", "cuentas_bancarias", "centros_costo",
        "condiciones_pago", "tipos_documento", "retenciones", "regimenes_fiscales",
        "configuraciones", "doctrine_migration_versions", "roles"
    }

    with open(input_file, 'r', encoding='utf-8') as f:
        lines = f.readlines()

    with open(out_estructura, 'w', encoding='utf-8') as f_est, \
         open(out_instalacion, 'w', encoding='utf-8') as f_inst:
        
        mode_est = 'WRITE'
        mode_inst = 'WRITE'

        for line in lines:
            # Check for block transitions
            
            # Start of a Table structure block
            match_table = re.match(r"^/\*Table structure for table `([^`]+)` \*/", line)
            if match_table:
                mode_est = 'WRITE'
                mode_inst = 'WRITE'
                
            # Start of a Data block
            match_data = re.match(r"^/\*Data for the table `([^`]+)` \*/", line)
            if match_data:
                table_name = match_data.group(1)
                
                # Estructura never has data
                mode_est = 'SKIP'
                
                # Instalacion only has data for specific tables
                if table_name in TABLAS_DATOS:
                    mode_inst = 'WRITE'
                else:
                    mode_inst = 'SKIP'

            # Start of Triggers, Views or final statements (!...)
            if re.match(r"^/\* Trigger structure", line) or \
               re.match(r"^/\*View structure", line) or \
               re.match(r"^/\*!", line):
                mode_est = 'WRITE'
                mode_inst = 'WRITE'

            # Write depending on mode
            if mode_est == 'WRITE':
                f_est.write(line)
                
            if mode_inst == 'WRITE':
                f_inst.write(line)

if __name__ == "__main__":
    input_file = r"C:\Users\cvela\OneDrive\Desktop\cxp\dump\cxpFinal.sql"
    out_estructura = r"C:\Users\cvela\OneDrive\Desktop\cxp\dump\cxpEstructura.sql"
    out_instalacion = r"C:\Users\cvela\OneDrive\Desktop\cxp\dump\cxpInstalacion.sql"
    
    process_dump(input_file, out_estructura, out_instalacion)
    print("Dumps generados analizando bloques /*Data for... */ exitosamente.")
