#!/bin/bash
# lastact: arturo@2023-02-24
# desc: Personalización en función del nombre del centro del Background del Lightdm Greeter
# Se puede pasar como parámetro directamente el nombre que queremos que se visualice en el Greeter, o rescatarlo del JSON del centro

FICHFUNCS="/usr/bin/vx-funcs-bash"
[ -f "${FICHFUNCS}" ] && . "${FICHFUNCS}" "null"

# 0) Comprobamos que el usuario que ejecuta el script es el root:
vx-check_user_root

# 1) Preparamos la auditoria del servicio:
LOG="$(basename "${0}").log"
vx-log_xsession -o "${LOG}"

DIR_BASE="/usr/share/vitalinux/lightdm/greeter"
NOMBRE_BACKGROUND_BASE="vx-wallpaper-nord"
SVG_ORIGINAL="${NOMBRE_BACKGROUND_BASE}.svg"
DEBUG="false"

vx_generar_background() {
    # 3.1) Comprobamos que el nombre del centro no es demasiado largo, limitando a 24 el nombre del centro (sin tener en cuenta el prefijo, el TIPO):
    LONG_MAX="25"
    TEXTO=""
    TEXTO_LINEA_1=""
    TEXTO_LINEA_2=""
    NLETRAS="$(wc -c <<<"${NOMBRE_CENTRO}")"
    if ((NLETRAS <= LONG_MAX)); then
        TEXTO_LINEA_1="${NOMBRE_CENTRO}"
        "${DEBUG}" && echo "=> No superamos ${LONG_MAX} caracteres. Configuramos como nombre de centro: ${TEXTO_LINEA_1}"
    else
        "${DEBUG}" && echo "=> Superamos ${LONG_MAX} caracteres: dividiremos ${NOMBRE_CENTRO} en dos lineas"
        ## Alternativa 1:
        # PALABRAS=(${NOMBRE_CENTRO})
        # NPALABRAS="${#PALABRAS[@]}"
        # CONT=0
        # while ((CONT < NPALABRAS)); do
        #     TEXTO="${PALABRAS[${CONT}]} "
        #     (($(wc -c <<<"${TEXTO}") < LONG_MAX)) &&
        #         TEXTO_LINEA_1+="${PALABRAS[${CONT}]} " ||
        #         TEXTO_LINEA_2+="${PALABRAS[${CONT}]} "
        #     ((CONT++))
        # done
        ## Alternativa 2:
        # TEXTO_LINEA_1="$(echo "${NOMBRE_CENTRO}" | sed "s/\(.\{1,$((LONG_MAX - ${#TIPO}))\} \)\(.*\)/\1/")"
        # "${DEBUG}" && echo "#> Linea 1: ${TIPO} ${TEXTO_LINEA_1}"
        # RESTO="$(echo "${NOMBRE_CENTRO}" | sed "s/\(.\{1,$LONG_MAX\} \)\(.*\)/\2/")"
        # TEXTO_LINEA_2="$(echo "${RESTO}" | sed "s/\(.\{1,$LONG_MAX\} \)\(.*\)/\1.../")"
        # "${DEBUG}" && echo "#> Linea 2: ${TEXTO_LINEA_2}"
        ## Alternativa 3:
        LONG=$((LONG_MAX - ${#TIPO}))
        OLDIFS=$IFS # Modificamos IFS para crear un Array a partir del número de redes encontradas con ese nombre
        IFS=$'\n'
        TROZOS=($(fold -s -w$LONG <<<"${NOMBRE_CENTRO}"))
        TEXTO_LINEA_1="${TROZOS[0]}"
        "${DEBUG}" && echo "#> Linea 1: ${TIPO} ${TEXTO_LINEA_1}"
        RESTO="$(awk -F "${TROZOS[0]}" '{ print $2}' <<<"${NOMBRE_CENTRO}")"
        "${DEBUG}" && echo "Resto: ${RESTO}"
        TROZOS2=($(fold -s -w$LONG_MAX <<<"${RESTO}"))
        TEXTO_LINEA_2="${TROZOS2[0]}"
        [[ "${TROZOS2[1]}" ]] && TEXTO_LINEA_2+="..."
        "${DEBUG}" && echo "#> Linea 2: ${TEXTO_LINEA_2}"
        IFS=$OLDIFS
    fi

    # 3.4) Generamos el nuevo Background:
    sed -e "s/Provocando/${TIPO}/g" \
        -e "s/el Cambio/${TEXTO_LINEA_1}/g" \
        -e "s#<\!-- Texto2 -->#${TEXTO_LINEA_2}#g" \
        "${DIR_BASE}/${SVG_ORIGINAL}" >"${DIR_BASE}/${NOMBRE_BACKGROUND_BASE}-centro.svg"
    [[ -f "${DIR_BASE}/${NOMBRE_BACKGROUND_BASE}.jpg" && ! -f "${DIR_BASE}/${NOMBRE_BACKGROUND_BASE}.ori.jpg" ]] &&
        mv "${DIR_BASE}/${NOMBRE_BACKGROUND_BASE}.jpg" "${DIR_BASE}/${NOMBRE_BACKGROUND_BASE}.ori.jpg"
    convert "${DIR_BASE}/${NOMBRE_BACKGROUND_BASE}-centro.svg" "${DIR_BASE}/${NOMBRE_BACKGROUND_BASE}.jpg"
}

NOMBRE_COMPLETO_CENTRO="null"
# 2.1) Comprobamos si se ha pasado como parámetro el nombre a imponer en el Background:
[[ "${1}" ]] && NOMBRE_COMPLETO_CENTRO="${1}"

# 2.2) Comprobamos si hay instalado un paquete de centro, y su correspondiente nombre de centro:
FICH_CONF_CENTRO="/usr/share/vitalinux/conf-centro/vx-centro.conf.json"
if [[ -z "${1}" && -f "${FICH_CONF_CENTRO}" ]]; then
    NOMBRE_COMPLETO_CENTRO="$(jq -r ".greeter.nombre_centro" "${FICH_CONF_CENTRO}")"
    [[ "${NOMBRE_COMPLETO_CENTRO}" == "null" ]] && NOMBRE_COMPLETO_CENTRO="$(jq -r ".centro" "${FICH_CONF_CENTRO}")"
fi

if [[ "${NOMBRE_COMPLETO_CENTRO}" && "${NOMBRE_COMPLETO_CENTRO}" != "null" ]]; then
    # 2.3) Recuperamos el tipo y nombre del centro:
    TIPO="$(cut -d" " -f1 <<<"${NOMBRE_COMPLETO_CENTRO}")"
    NOMBRE_CENTRO="$(awk -F "${TIPO} " '{print $2}' <<<"${NOMBRE_COMPLETO_CENTRO}")"
    echo "=> Va a generarse un nuevo background para el Greeter del Lightdm: ${TIPO} - ${NOMBRE_CENTRO}"
    vx_generar_background
fi
