#!/bin/bash

# Syntax: migasfree-launcher [force-upgrade]

function run_scripts() {
    local _PATH="$1"
    if [ -d "$_PATH" ]; then
        for _FILE in "$_PATH"/*.sh; do
            if [ -r "$_FILE" ]; then
                # Al hacer uso del dot "." o "source", es como si incrustaramos el código del script aquí:
                # => ¡¡Esto hace que no se puedan usar comando "exit" a la ligera, matariamos migasfree-launcher!!
                #. "$_FILE"
                # shellcheck source=/dev/null
                chmod +x "${_FILE}"
                "${_FILE}"
            fi
        done
    fi
}

# 0) Preparamos la auditoria de la configuración de centro:
FICHFUNCS="/usr/bin/vx-funcs-bash"
[ -f "${FICHFUNCS}" ] && . "${FICHFUNCS}"

# [[ "$(LC_ALL=C type -t "vx-log_xsession")" == "function" ]] && \
# FICHLOG="vx-migasfree-launcher.log" && \
# vx-log_xsession -o "${FICHLOG}" && \
LOG="$(basename "${0}").log"
vx-log_xsession -o "${LOG}"

echo "#### $(date) - Auditoria de Comunicación con Migasfree: ${FICHLOG}"
#FICHLOG="/var/log/vitalinux/vx-comunicacion_migasfree.log"
#echo "$(date) - Comunicación con Migasfree" | tee "${FICHLOG}"

_SYNC_ARGS=""
FICHCONFCRON="/etc/default/vx-dga-variables/vx-dga-x-migasfree-launcher-cron.conf"

[[ "$1" == "force-upgrade" ]] &&
{
    _SYNC_ARGS="--force-upgrade"
    crudini --set "${FICHCONFCRON}" "Configuration" "FORCEMIGAS" "1" &&
    echo "=> Has forzado una actualización contra Migasfree: [FORCEMIGAS=1]. Comenzará en breve."
} || _SYNC_ARGS=""

service cron stop >/dev/null 2>/dev/null

echo "# Van a comenzar los pasos previos a la actualización contra Migasfree ..."

# block update-notifier
if [ -f /usr/bin/update-notifier ]; then
    chmod 000 /usr/bin/update-notifier
    chmod 000 /etc/xdg/autostart/update-notifier.desktop || :
fi

# block jockey-gtk
if [ -f /usr/bin/jockey-gtk ]; then
    chmod 000 /usr/bin/jockey-gtk
    chmod 000 /etc/xdg/autostart/jockey-gtk.desktop || :
fi

_FIRST=/var/tmp/migasfree/first-tags.conf
_CHANGE_NODE=/var/tmp/migasfree/change-node.conf
_USER=$(python3 -c "from migasfree_client import utils; print (utils.get_graphic_user(utils.get_graphic_pid()[0]))")

_PYTHON_CODE="from migasfree_client.utils import get_config
from migasfree_client import settings
config = get_config(settings.CONF_FILE, 'client')
print (config.get('server', 'localhost'))
"
_SERVER=$(python3 -c "$_PYTHON_CODE")

if [ -f $_FIRST ]; then
    _IS_FIRST_RUN="1"
else
    _IS_FIRST_RUN="0"
fi

# execute prerun scripts
echo "--------------------------------"
echo "=> Ejecutamos los scripts de prerun ..."
run_scripts /usr/share/migasfree-launcher/prerun.d

# A continuación haremos la sincronización contra Migasfree a través de una subshell para filtrar los códigos ANSI.
# Creamos un archivo temporal para almacenar temporalmente el valor de _RET generado por la subshell y consultarlo luego:
# Eliminamos previamente el fichero temporal residual que pudiera quedar de sesiones gráficas anteriores.
rm -f "/tmp/vx-RET-migasfree-launcher-update-"*
_RET_FILE="/tmp/vx-RET-migasfree-launcher-update-$(basename "$(mktemp)")"
# Inicializamos el valor de retorno a 0 (damos por hecho que la comunición y actualización contra Migasfree va a ir bien)
_RET=0

if [ -f $_FIRST ]; then
    _TAGS="$(cat $_FIRST)"
    if [ -z "$_TAGS" ]; then
        _TAGS='""'
    fi
    if [ "$SUDO_UID" = "999" ] || vx-modolive-check; then
        echo "--------------------------------"
        echo "It is testing LiveCD..."
    else
        # echo "--------------------------------"
        #echo "Y" | LANGUAGE=C migasfree --register
        ###echo "s" | LC_ALL=C migasfree --register
        #echo "Report tags: $_TAGS"
        ## echo "Configurando Etiquetado Migasfree:"
        #/usr/bin/migasfree-tags --communicate $_TAGS
        ## Para evitar problemas de permisos en:
        ## ".config/Migasfree Tags Managament" y ".cache/Migasfree Tags Managament"
        ## lo lanzará el usuario gráfico:
        ## su "${_USER}" -c 'nw /usr/share/vitalinux/nwjs-apps/nwjs-migasfree-tags' --login
        # /mnt/nwjs-sdk-v0.36.2-linux-x64/nw /usr/share/vitalinux/nwjs-apps/vue-vx-postinstall-dist 2> /dev/null
        ### cd "/usr/share/vitalinux/nwjs-apps/vue-vx-postinstall-dist" && nw . 2> /dev/null

        echo "--------------------------------"
        echo "=> Post-Instalación de Vitalinux: va a comenzar la sincronización contra Migasfree ..."
        {
            if [[ "${_SYNC_ARGS}" == "--force-upgrade" ]]; then
                echo -e "# Sincronización forzada por el usuario #\n"
                /usr/bin/migasfree --update "${_SYNC_ARGS}"
                echo $? > "${_RET_FILE}"
            else
                if vx-migasfree-inicio; then
                    /usr/bin/migasfree --update "$_SYNC_ARGS"
                    echo $? > "${_RET_FILE}"
                fi
            fi
        } | sed -u 's/\x1b\[[0-9;]*m//g'
        echo "--------------------------------"
    fi
else
    if [ -f "$_CHANGE_NODE" ]; then
        echo "--------------------------------"
        echo "Y" | LANGUAGE=C migasfree --register
        echo "Report tags: " $(cat $_CHANGE_NODE)
        /usr/bin/migasfree-tags --communicate $(cat $_CHANGE_NODE) || :
        mv $_CHANGE_NODE $_CHANGE_NODE.save || :
    fi
    echo "--------------------------------"
    echo "=> Comprobamos si este inicio de sesión requiere sincronización con Migasfree:"
    {
        if [[ "${_SYNC_ARGS}" == "--force-upgrade" ]]; then
            echo -e "# Sincronización forzada por el usuario #\n"
            /usr/bin/migasfree --update "${_SYNC_ARGS}"
            echo $? > "${_RET_FILE}"
        else
            if vx-migasfree-inicio; then
                /usr/bin/migasfree --update "$_SYNC_ARGS"
                echo $? > "${_RET_FILE}"
            else
                echo 0 > "${_RET_FILE}"
            fi
        fi
    } | sed -u 's/\x1b\[[0-9;]*m//g'
    echo "--------------------------------"
fi

# Antes de ejecutar los scripts de postrun comprobamos el valor _RET devuelto por la sincronización contra Migasfree:
_RET=$(<"${_RET_FILE}")
[[ "${_RET}" ]] &&
    crudini --set "${FICHCONFCRON}" "Configuration" "RET_MIGASFREE_ACTUALIZACION" "${_RET}"
if (( "${_RET}" == 0 )) ; then
    echo "#> La actualización contra Migasfree ha sido exitosa: _RET = ${_RET}"
else
    echo "#> La actualización contra Migasfree ha devuelto errores: _RET = ${_RET}."
    echo "#> Sincronizaremos de nuevo en el siguiente inicio de sesión."
fi

# execute postrun scripts
echo "=> Ejecutamos los scripts de postrun ..."
run_scripts /usr/share/migasfree-launcher/postrun.d

if [ -f "$_FIRST" ] && ! vx-modolive-check ; then
    mv $_FIRST $_FIRST.save
fi

# run update-notifier
if [ -f /usr/bin/update-notifier ]; then
    chmod 755 /usr/bin/update-notifier
    exec su --login -c "/usr/bin/update-notifier --force-use-gksu" $_USER &>/dev/null &
fi

# run jockey-gtk
if [ -f /usr/bin/jockey-gtk ]; then
    chmod 755 /usr/bin/jockey-gtk
    if [ "$_IS_FIRST_RUN" = "1" ]; then
        exec su --login -c "exec jockey-gtk --check" $_USER &>/dev/null &
    fi
fi

service cron start >/dev/null 2>/dev/null

[[ "${_SYNC_ARGS}" == "--force-upgrade" ]] &&
    crudini --set "${FICHCONFCRON}" "Configuration" "FORCEMIGAS" "0"

echo "----------- TERMINADO ------------"
echo "##--------------------------------##"
echo "=> Ya ha terminado la comunicación con Migasfree ..."
echo "=> Ya puedes cerrar esta ventana ..."
echo "##--------------------------------##"

exit "${_RET}"
