import mwclient
import json
import mysql.connector

# Configuración de la conexión a la base de datos
config = {
    "user": "usermas",
    "password": "u2$p1Lg@XY#XUpY2kf",
    "host": "10.51.20.5",
    "database": "data_catastro",
    "raise_on_warnings": True,
}

def obtener_glosario_y_contenido():
    # Conexión al sitio de MediaWiki
    site = mwclient.Site('wiki.bcgs.solutions', path='/wikibcgs/')

    # Obtener todas las páginas de la wiki
    all_pages = site.allpages()

    # Crear un diccionario para organizar el glosario y su contenido
    glosario = {}

    for page in all_pages:
        title = page.name
        first_char = title[0].upper()
        
        # Asegurarse de que la letra inicial esté en el glosario
        if first_char not in glosario:
            glosario[first_char] = []

        # Obtener el contenido de la página
        try:
            content = site.pages[title].text()
        except Exception as e:
            content = f"Error al obtener contenido: {e}"

        # Añadir el título y su contenido al glosario
        glosario[first_char].append({
            "titulo": title,
            "contenido": content
        })

    return glosario

def insertar_glosario_en_bd(glosario):
    # Conexión a la base de datos
    try:
        connection = mysql.connector.connect(**config)
        cursor = connection.cursor()

        # Query para insertar los datos en la tabla
        insert_query = """
        INSERT INTO wiki_bcgs (indice, titulo, contenido)
        VALUES (%s, %s, %s)
        """

        # Recorrer el glosario y preparar los datos para la inserción
        for indice, entradas in glosario.items():
            for entrada in entradas:
                titulo = entrada["titulo"]
                contenido = entrada["contenido"]
                cursor.execute(insert_query, (indice, titulo, contenido))

        # Confirmar los cambios en la base de datos
        connection.commit()
        print(f"Se insertaron {cursor.rowcount} registros exitosamente.")

    except mysql.connector.Error as err:
        print(f"Error: {err}")

    finally:
        if connection.is_connected():
            cursor.close()
            connection.close()

# Ejecución principal
if __name__ == "__main__":
    # Obtener el glosario y sus contenidos
    glosario = obtener_glosario_y_contenido()

    # Insertar los datos en la base de datos
    insertar_glosario_en_bd(glosario)
