#!/bin/bash

FICHINI="/etc/default/vx-dga-variables/vx-centro.conf.ini"
SECCION="ResetearHomes"

# 0) En primer lugar comprobamos que existe el archivo INI y la sección ${SECCION}
# En caso de no existir creamos ambas cosas: fichero, sección y directivas correspondientes
# [${SECCION}]
# fechaini = 2020-11-23
# fechaset = null
# usuarios = PRIBAC1,PRIBAC2,PRIBAC3,SECBAC,ESO1,ESO2,ESO3,DESIGN1,DESIGN2

function crear_fichini() {
    if ! crudini --get "${FICHINI}" "${SECCION}" > /dev/null 2>&1 ; then
        crudini --set "${FICHINI}" "${SECCION}" && \
        echo "=> Se ha creado la sección: ${SECCION}"
    else
        echo "=> Ya existe la sección: ${SECCION}"
    fi
    for PARAM in "fechaini=2021-09-15" \
    "fechaset=null" \
    "usuarios=all" ; do
        CLAVE="${PARAM/=*/}"
        VALOR="${PARAM/*=/}"
        if ! VARLORINI="$(crudini --get "${FICHINI}" "${SECCION}" "${CLAVE}" 2> /dev/null)" ; then
            crudini --set "${FICHINI}" "${SECCION}" "${CLAVE}" "${VALOR}" && \
            echo "=> Se ha insertado ${CLAVE}:${VALOR}"
        else
            echo "=> Ya existen ${CLAVE}:${VARLORINI}"
        fi
    done
}

[[ ! -f "${FICHINI}" ]] && \
echo "=> No existe el archivo de variables de configuración de centro: ${FICHINI}" && \
echo "=> Vamos a crear: ${FICHINI}" && touch "${FICHINI}"
crear_fichini

# Hacemos cáculos con fechas como unix-timestamps (segundos desde 1.1.1970 0:0:0):
TODAY="$(date +%Y-%m-%d)"
TODAYMS="$(date -d "${TODAY}" "+%s")"
FECHAINI=$(crudini --get "${FICHINI}" "${SECCION}" "fechaini")
FECHAINIMS="$(date -d "${FECHAINI}" "+%s")"
[[ ${TODAYMS} -lt ${FECHAINIMS} ]] && \
echo "=> No ha llegado el día de ejecutar la acción resetear usuarios: ${TODAY} < ${FECHAINI}" && \
exit 0

# Comprobamos si ya se ha realizado la acción comprobando fechaset:
FECHASET=$(crudini --get "${FICHINI}" "${SECCION}" "fechaset")
[[ "${FECHASET}" != "null" ]] && \
echo "=> Ya se ejecutó la acción de resetear usuarios: ${FECHASET}" && \
exit 0

# Obtenemos la lista de usuarios afectados:
LISTAUSU=( $(crudini --get "${FICHINI}" "${SECCION}" "usuarios" | tr -s "," " ") )
for USU in "${LISTAUSU[@]}" ; do
    # Comprobamos que el usuario ha iniciado sesión gráfica alguna vez:
    HOMEUSU="$(vx-home-usuario-grafico "${USU}")"
    FICHDIRS="${HOMEUSU}/.config/user-dirs.dirs"
    [ ! -f "${FICHDIRS}" ] && \
    echo "=> ${USU} no ha iniciado sesión todavía ... No se reseteará su HOME" && \
    continue
    # Eliminamos todo a excepción de los ficheros ocultos de configuración y directorios del perfil por defecto:
    DIRECTORIOS=(DESKTOP DOWNLOAD TEMPLATES PUBLICSHARE DOCUMENTS MUSIC PICTURES VIDEOS)
    COMANDO="rsync -axzuvh --chown=${USU} --delete --force --exclude='.*'"
    for DIR_NUM in {0..7} ; do
        DIRUSU="$(su "${USU}" -c "xdg-user-dir ${DIRECTORIOS[${DIR_NUM}]}")"
        [ -d "${DIRUSU}" ] && \
        BASEDIRUSU="$(basename "${DIRUSU}")"
        COMANDO+=" --exclude='${BASEDIRUSU}'"
    done
    # Comprobamos también la existencia de la carpeta Escritorio:
    for DIR_DESKTOP in "Escritorio" "Desktop" "Bureau" "Schreibtisch" ; do
        [ -d "${HOMEUSU}/${DIR_DESKTOP}" ] && \
        COMANDO+=" --exclude='${DIR_DESKTOP}'"
    done
    COMANDO+=" /etc/skel/ '${HOMEUSU}/'"
    eval "${COMANDO}" && \
    echo "=> Se ha reseteado el home del usuario: ${USU}"
    # Limpiamos el perfil del usuario y sus navegadores Web:
    vx-regenerar-perfil-usuarios-cli "${USU}"
    vx-resetear-navegadores-web "${USU}"
done

# Asignamos fechaset para indicar que se ha ejecutado la acción:
crudini --set "${FICHINI}" "${SECCION}" "fechaset" "${TODAY}" && \
echo "=> Se han reseteado los usuarios correctamente: ${LISTAUSU[*]}" && \
exit 0