#!/bin/bash

# ======================================================================
# Archivo:       functions
# Ruta:          /opt/createmaster/
# Autor:         Charlie Martínez® <cmartinez@quirinux.org>
# Licencia:      https://www.gnu.org/licenses/gpl-2.0.txt
# Propósito:     Colección de funciones
# Distribución:  Quirinux 2.x
# ======================================================================

#
# Copyright (c) 2019-2025 Charlie Martínez, derechos reservados.
# Licencia: https://www.gnu.org/licenses/gpl-2.0.txt
# Usos autorizados y no autorizados de la marca Quirinux:
# Ver https://www.quirinux.org/aviso-legal
#

# ----------------------------------------------------------------------
# Variables
# ----------------------------------------------------------------------

	source "/opt/createmaster/var_distro" # Variables de la distribución

# ----------------------------------------------------------------------
# Funciones locales
# ----------------------------------------------------------------------

function _quit() {
    # Function to exit
    clear
    exit 0
}

function _rootcheck() {	
	# Revisa si el usuario tiene privilegios de administración
	if [ "$EUID" -ne 0  ]; then
		echo ''
		echo "Este script debe ejecutarse con permisos de root."
		echo 'Puedes intentarlo con "sudo" tuusuario, "sudo su" o "su root".'
		echo ''
		exit 1
	fi	
}

function _internet() {
	# Revisa si existe conexión a internet
	if ! ping -c 1 google.com &> /dev/null; then
		echo "ERROR: Este programa require conexión a internet."
		xit 1
	fi        
}

function _update() {
    # Detecta sistema de paquetes y actualiza la lista
    if command -v apt-get &>/dev/null; then
        apt-get update && apt-get upgrade -y
    elif command -v dnf &>/dev/null; then
        dnf update -y
    elif command -v yum &>/dev/null; then
        yum update -y
    else
        echo "No se encontró un gestor de paquetes compatible" >&2
        exit 1
    fi    
}

function _depends() {
	# Instala dependencias
    TMP_DIR="/tmp/repo"
    mkdir -p "$TMP_DIR"
    
    get_latest_version() {
        local location=$1
        # Revisa si los paquetes a descargar son locales o remotos
        if [[ $location =~ ^https?:// ]]; then
            wget -qO- "$location" | grep -oP "[a-zA-Z0-9._-]+\.(deb|rpm)" | sort -V | tail -n 1
        else
            find "$location" -type f \( -name "*.deb" -o -name "*.rpm" \) | sort -V | tail -n 1 | xargs -I{} basename {}
        fi
    }
    
    if [ ! -e /opt/createmaster/verif/ok-dependencias ]; then
        _update
        
        # Acá se definen las dependencias
        BASE_PACKAGES=(wget git spice-vdagent dialog)
        
        # Intala los paquetes de las dependencias usando el gestor que tenga la distro
        if command -v apt &>/dev/null; then
            for pkg in "${BASE_PACKAGES[@]}"; do
                if ! dpkg -l | grep -qw "$pkg"; then
                    apt install -y "$pkg"
                fi
            done
        elif command -v dnf &>/dev/null; then
            for pkg in "${BASE_PACKAGES[@]}"; do
                if ! dnf list installed "$pkg" &>/dev/null; then
                    dnf install -y "$pkg"
                fi
            done
        elif command -v yum &>/dev/null; then
            for pkg in "${BASE_PACKAGES[@]}"; do
                if ! yum list installed "$pkg" &>/dev/null; then
                    yum install -y "$pkg"
                fi
            done
        else
            echo "No se encontró un gestor de paquetes compatible" >&2
            exit 1
        fi
        
        # Instalar depenendicas adicionales
        for location in "${DISTRO_DEPENDS_LOCATION[@]}"; do
            latest_package=$(get_latest_version "$location")
            
            if [[ -n "$latest_package" ]]; then
                if [[ $location =~ ^https?:// ]]; then
                    wget --no-check-certificate "$location$latest_package" -O "$TMP_DIR/$latest_package"
                else
                    cp "$location/$latest_package" "$TMP_DIR/"
                fi
                
                # Instalar paquetes descargados
                if [[ "$latest_package" == *.deb ]]; then
                    apt install -y "$TMP_DIR/$latest_package"
                elif [[ "$latest_package" == *.rpm ]]; then
                    if command -v dnf &>/dev/null; then
                        dnf install -y "$TMP_DIR/$latest_package"
                    elif command -v yum &>/dev/null; then
                        yum install -y "$TMP_DIR/$latest_package"
                    fi
                fi
            fi
        done
        # Dejar testigo
        mkdir -p /opt/createmaster/verif/
        touch /opt/createmaster/verif/ok-dependencias
    fi
}

function _lang() {	
	
    # Lenguaje predeterminado
    LANG_PREDET="es_ES.UTF-8" 
    
     # Verifica testigo de idioma
	if [ ! -e /opt/createmaster/verif/ok-lang ]; then
		
	if [ ! -e /usr/share/locale/locale.alias ]; then
	touch /usr/share/locale/locale.alias
	fi
    
    idiomas=("en_US.UTF-8" "fr_FR.UTF-8" "de_DE.UTF-8" "it_IT.UTF-8" "gl_ES.UTF-8" "pt_PT.UTF-8" "${LANG_PREDET}" )

   # Configura los idiomas
    for idioma in "${idiomas[@]}"; do
        # Revisa si la configuración ya existe
        if ! locale -a | grep -q "$idioma"; then
            sudo locale-gen $idioma
            echo "Configuración de $idioma completa."
        fi
        if [ "$idioma" == "${LANG_PREDET}" ]; then
            break # Sale del bucle luego de instalar el idioma predeterminado
        fi
    done

    # Se establece el idioma predeterminado
    sudo update-locale LANG="${LANG_PREDET}"
    
    touch /opt/createmaster/verif/ok-lang
    
    fi
}

function _verif_path() {
	# Verifica si el script está siendo utilizado en una distro master.
    # Para ello, el programa entiende que debe existir una carpeta
    # con el nombre de usuario = distro + 2, ejemplo: /home/quirinux2
    if [ ! -d "$DISTRO_PATH" ]; then
        echo "ERROR: Comando exclusivo para ser utilizado en ${DISTRO_NAME^} Master."
        exit 1
	fi
}
