#!/bin/bash

# ======================================================================
# Fichero:		creariso
# Autor:		Charlie Martínez® <cmartinez@quirinux.org>
# Licencia:		https://www.gnu.org/licenses/gpl-2.0.txt
# Utilidad:		Crear iso a partir de distro master
# Distro:		Quirinux 2.0
# ======================================================================

#
# Este script fue creado para Quirinux 2.0 y sirve para automatizar 
# la creación de una iso por medio de la utilidad Penguin's Eggs 
# de Piero Proietti. Quirinux se crea con número de versión y número
# de revisión (actualizaciones acumulativas, similar a los service packs
# de otros SO). Este script facilita la modificación de estos parámetros,
# desde un archivo de variables, desde donde levanta también el Theme 
# y demás información sobre la distro derivada.
#
# Copyright (c) 2019-2025 Charlie Martinez. Derechos Reservados
# Licencia https://www.gnu.org/licenses/gpl-2.0.txt
# Usos permitidos y no autorizados de la marca Quirinux:
# Consultar en https://www.quirinux.org/aviso-legal
 
# ======================================================================
# Variables
# ======================================================================
	
	source "/opt/isocreate/var_distro" # Variables de la distribución

# ======================================================================
# Funciones globales
# ======================================================================
	
	source "/opt/isocreate/functions"		
	source "/usr/local/bin/limpiar" 		# requiere quirinux-commands

# ======================================================================
# Funciones locales
# ======================================================================

function _rev() {
	# Función para solicitar el número de revisión.
    ARCHIVO_QML="$DISTRO_PATH/.wardrobe/vendors/$DISTRO_NAME/theme/calamares/branding/show.qml"
    REV_ACTUAL=$(grep -oP 'Rev\. \d+' "$ARCHIVO_QML" | awk '{print $2}')
    REV_ACTUAL=${REV_ACTUAL:-1} # Valor por defecto si no se encuentra una revisión
    echo "Revisión actual: $REV_ACTUAL ¿Mantener? [s/n]"
    read -r RESPUESTA
    if [[ "$RESPUESTA" != "s" ]]; then
        echo "¿Número de revisión?"
        read -r REVISION
    else
        REVISION="$REV_ACTUAL"
    fi
    FECHA_ACTUAL=$(date +"%d-%m-%Y")
}

function _calamares() {
	# Función para creditos en Calamares
    for ARCHIVO in "$DISTRO_PATH/.wardrobe/vendors/$DISTRO_NAME/theme/calamares/branding/show.qml" \
                   "/etc/calamares/branding/$DISTRO_NAME/show.qml"; do
        sed -i "s|Rev\. [0-9]\+ \[\(.*\)\]|Rev. $REVISION [$FECHA_ACTUAL]|g" "$ARCHIVO"
        sed -i "s|<b>Versión:</b> .*|<b>Versión:</b> $DISTRO_VERSION ${DISTRO_RELEASE^^} $FECHA_LANZAMIENTO | Rev. $REVISION [$FECHA_ACTUAL]<br/><br/>|g" "$ARCHIVO"
        sed -i "s|qsTr(\"<h1> GNU/Linux Versión .*\"|qsTr(\"<h1> GNU/Linux Versión $DISTRO_VERSION\"|g" "$ARCHIVO"
    done
}

function _eggsyaml() {
    local eggs_yaml="/etc/penguins-eggs.d/eggs.yaml"

    # Obtener la versión más reciente del kernel instalada
    latest_kernel=$(ls -1 /boot/vmlinuz-* | sort -V | tail -n1 | sed 's|/boot/vmlinuz-||')
    
    if [[ -z "$latest_kernel" ]]; then
        echo "Error: No se pudo determinar la versión más reciente del kernel."
        exit 1
    fi

    # Reemplazar en el archivo
    sed -i "s|^initrd_img: .*|initrd_img: /boot/initrd.img-$latest_kernel|" "$eggs_yaml"
    sed -i "s|^vmlinuz: .*|vmlinuz: /boot/vmlinuz-$latest_kernel|" "$eggs_yaml"

    echo "Archivo actualizado con el kernel: $latest_kernel"
}


function _creariso() {
	# Función para crear la ISO.
    eggs produce --theme $DISTRO_NAME --release --max
}

function _isoname() {
	# Función para renombrar la ISO generada
    ISO_ORIGINAL=$(find /home/eggs/.mnt/ -type f -name "*.iso" | head -n 1)
    if [ -n "$ISO_ORIGINAL" ]; then
        ISO_NOMBRE="${DISTRO_NAME^}${DISTRO_VERSION//./-}-${DISTRO_RELEASE^}_x64_Rev${REVISION}.iso"
        mv "$ISO_ORIGINAL" "$DISTRO_PATH/Escritorio/$ISO_NOMBRE"
    fi
}

function _md5sum() {	
	# Función para crear el fichero con el código de verificación de integridad.
    ISO_BASE="${ISO_NOMBRE%.iso}"  # Elimina la extensión .iso
    if [ -e  "$DISTRO_PATH/Escritorio/$ISO_NOMBRE" ]; then  
    cd "$DISTRO_PATH/Escritorio" || exit 1  # Entra en la carpeta donde está la ISO
    md5sum "$ISO_NOMBRE" > "${ISO_BASE}.md5"
    fi
}

function _despedida() {
	# Función de despedida
    if [ -e "${ISO_BASE}.md5" ]; then
    echo "¡ISO Creada! Almacenada en escritorio de $DISTRO_PATH"
    fi
}

# ======================================================================
# Ejecución de funciones
# ======================================================================
# function			# Tipo		# Source (if remote)
# ----------------------------------------------------------------------
_rootcheck			# Global	# /opt/isocreate/functions
_internet			# Global	# /opt/isocreate/functions
_keggs				# Global	# /usr/local/bin/limpiar
_update				# Global	# /opt/isocreate/functions
_depends			# Global	# /opt/isocreate/functions	
_rev				# Local
_calamares			# Local
_eggsyaml			# Local
_creariso			# Local
_isoname			# Local
_md5sum				# Local
_despedida			# Local
