import os
import configparser

class ConfigNotFoundError(Exception):
    """Se lanza cuando una variable no se encuentra en el archivo de configuración."""
    pass

NOMBRE_FICHERO = "config.ini"

def read_config():
    config = configparser.ConfigParser()
    
    execution_dir = os.getcwd()
    parent_dir = os.path.dirname(execution_dir)

    config_path = os.path.join(parent_dir, NOMBRE_FICHERO)

    if not os.path.exists(config_path):
        raise FileNotFoundError(f"No se encontró el archivo de configuración en {config_path}.")

    config.read(config_path)
    return config


def get_config(variable_name):
    """
    Obtiene el valor de una variable de configuración desde el archivo `config.ini`.

    Este método lee el archivo de configuración utilizando la función `read_config()`, 
    y busca la variable especificada por su nombre en todas las secciones del archivo 
    de configuración. Si la variable se encuentra, se devuelve su valor. Si no se encuentra 
    o ocurre un error, se registra un error y se retorna `None`.

    Parámetros:
    ----------
    variable_name : str
        El nombre de la variable de configuración que se desea obtener.

    Retorna:
    -------
    str
        El valor de la variable de configuración si se encuentra.

    Excepciones:
    ------------
    ConfigNotFoundError
        Si la variable no se encuentra en el archivo de configuración, se lanza una excepción personalizada `ConfigNotFoundError`.
    """
    config = read_config()

    for section in config.sections():
        if variable_name in config[section]:
            return config[section][variable_name]
    
    raise ConfigNotFoundError(f"Error al obtener la variable '{variable_name}' del fichero '{NOMBRE_FICHERO}'.")
    
