#!/bin/bash
# lastact: arturo@2023-02-23
# desc: Script encargado de eliminar los archivos de personalización del Entorno de Escritorio no tenidos en cuenta en el skel

LISTADO_BASICO=(
    ".config/xfce4/panel/whiskermenu-1.rc"                                  # Configuración del menú principal
    ".config/xfce4/desktop"                                                 # Configuración de la posición de los lanzadores del Escritorio
    ".config/xfce4/xfconf/xfce-perchannel-xml/xfce4-panel.xml"              # Configuración del panel superior
    ".config/xfce4/xfconf/xfce-perchannel-xml/xfce4-desktop.xml"            # Configuración del Escritorio
    ".config/xfce4/xfconf/xfce-perchannel-xml/xsettings.xml"                # Configuración de la apariencia
    ".config/xfce4/xfconf/xfce-perchannel-xml/xfce4-screensaver.xml"        # Configuración del Salvapantallas
    ".config/xfce4/xfconf/xfce-perchannel-xml/thunar.xml"                   # Explorador de archivos por defecto de xfce
    ".config/xfce4/xfconf/xfce-perchannel-xml/xfce4-session.xml"            # Configuración de aspectos de la sesión
    ".config/xfce4/xfconf/xfce-perchannel-xml/xfce4-power-manager.xml"      # Gestión de la energía
    ".config/xfce4/xfconf/xfce-perchannel-xml/keyboards.xml"                # Configuración del teclado
    ".config/xfce4/xfconf/xfce-perchannel-xml/keyboard-layout.xml"          # Configuración de la distribución del teclado
    ".config/xfce4/xfconf/xfce-perchannel-xml/xfce4-keyboard-shortcuts.xml" # Configuración de los atajos de xfce
    ".cache"
    # ".cache/icon-cache.kcache"
    ".config/menus"
)

LISTADO_COMPLEMENTARIO=(
    ".config/xfce4/terminal"                                # Configuración de la terminal de xfce
    ".config/xfce4/terminal/terminalrc"                     # Configuración de la terminal de xfce
    ".config/xfce4/helpers.rc"                              # Configuraciones personales: explorador de archivos, etc.
    ".local/share/xfce4/helpers/custom-FileManager.desktop" # Explorador de archivos por defecto
    ".config/xubuntu/xdg-xubuntu-templates.cfg"
    # ".config/dconf" # BD dconf que almacena parametros de configuración demandados por aplicaciones de GNOME
    # ".config/dconf/user" # BD dconf que almacena parametros de configuración demandados por aplicaciones de GNOME
    ".config/vx-skel-init.json" # Configuración inicial a realizar en el primer inicio gráfico
    ".config/gtk-3.0"
    # ".config/gtk-3.0/bookmarks"
    # ".config/gtk-3.0/settings.ini"
    ".local/share"
    # ".local/share/recently-used.xbel"
    # ".local/share/keyrings"
    ".icons/default/index.theme"
    ".gtkrc-2.0"
    ".Xdefaults"
)

[[ "${1}" =~ ^-b$|^--basic$ ]] && {
    LISTADO=("${LISTADO_BASICO[@]}")
    shift
} ||
    LISTADO=("${LISTADO_BASICO[@]}" "${LISTADO_COMPLEMENTARIO[@]}")

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

EJECUTOR="$(whoami)"

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

# Regeneramos los ficheros de configuración personales de los usuarios:
# 2.1) Si no se pasan parámetros y lo llama el usuario root se regeneran todos los usuarios gráficos
# 2.2) Si no se pasan parámetros y no lo llama el usuario root se regenera los del usuario gráfico actual
# 2.3) Si se le pasan ususarios como parámetros se regeneran únicamente los de esos usuarios
# if [[ ! -z "${1}" && "${EJECUTOR}" == "root" ]] ; then
#     LISTA_USUARIOS=("${@}")
#     elif [[ "${EJECUTOR}" == "root" ]] ; then
#     LISTA_USUARIOS=($(vx-usuarios-graficos))
# else
#     LISTA_USUARIOS=("${EJECUTOR}")
# fi

# Los parámetros recibidos para determinar la lista de usuarios afectados puede ser:
# 1) -ug => devolvería el usuario gráfico actual
# 2) -u usu1,usu2,usu3,... => devolvería la lista de que usuarios indicados son reales
# 3) -g grupo1,grupo2,... => devolvería la lista de que usuarios forman parte de esos grupos
# 4) usu1 usu2 usu3 ... => devolvería la lista de usuarios indicados que son reales
# 5) [sin parámetros] => devolvería la lista de todos los usuarios gráficos si el ejecutor es root, o el usuario que ejecuta si no es root
LISTA_USUARIOS=($(vx-funcs-users vx-obtener_lista_usuarios "${@}"))

vx-colorear_echo "magenta" "[$(vx-fecha)] Eliminación de Ficheros Configuración usuarios: ${LISTA_USUARIOS[*]}"

for USUARIO in "${LISTA_USUARIOS[@]}"; do
    # Comprobamos que el usuario existe y cual es su HOME:
    # vx-funcs-users vx-check_exit_users "${USU}" && \
    # HOMEUSU="$(vx-home-usuario-grafico "${USUARIO}")" || \
    # continue

    HOMEUSU="$(vx-home-usuario-grafico "${USUARIO}")"

    getent group "${USUARIO}" >/dev/null 2>&1 &&
        PROPIETARIO="${USUARIO}:${USUARIO}" ||
        PROPIETARIO="${USUARIO}"

    vx-colorear_echo "azul" "=> Eliminando Ficheros de Configuración Personales: ${USUARIO}"

    # Para eliminar cambios en el theme de iconos, del cursor, de la fuente, etc.:
    for FICH in "${LISTADO[@]}"; do
        if [[ -e "${HOMEUSU}/${FICH}" ]]; then
            if [[ -e "/etc/skel/${FICH}" ]]; then
                rsync -ah --delete --chown="${PROPIETARIO}" "/etc/skel/${FICH}" "${HOMEUSU}/${FICH}" &&
                    vx-colorear_echo "verde" "=> OK: Se ha reseteado: /etc/skel/${FICH} => ${HOMEUSU}/${FICH}"
            else
                if [[ -f "${HOMEUSU}/${FICH}" ]]; then
                    ! rm -Rf "${HOMEUSU}/${FICH}" &&
                        vx-colorear_echo "rojo" "=> ERROR: No se ha podido eliminar el fichero ${HOMEUSU}/${FICH} ..." ||
                        vx-colorear_echo "verde" "=> OK: Se ha eliminado el fichero ${HOMEUSU}/${FICH} ..."
                elif [[ -d "${HOMEUSU}/${FICH}" ]]; then
                    ! rm -Rf "${HOMEUSU}/${FICH}"/* &&
                        vx-colorear_echo "rojo" "=> ERROR: No se ha podido eliminar el contenido del directorio ${HOMEUSU}/${FICH} ..." ||
                        vx-colorear_echo "verde" "=> OK: Se ha eliminado el contenido del directorio ${HOMEUSU}/${FICH} ..."
                fi
            fi
        fi
    done

    vx-colorear_echo "azul" "=> Terminada eliminación Ficheros de Configuración: ${USUARIO}"

done

exit 0
