#!/bin/bash
# lastact: arturo@2023-04-12
# desc: Devuelve el valor de las variables XDG_DIRS en caso de que no esten definidas

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

# Formato: user-dirs.dirs
# XDG_DESKTOP_DIR="$HOME/Desktop"
# XDG_DOWNLOAD_DIR="$HOME/Descargas"
# XDG_TEMPLATES_DIR="$HOME/Plantillas"
# XDG_PUBLICSHARE_DIR="$HOME/Público"
# XDG_DOCUMENTS_DIR="$HOME/Documentos"
# XDG_MUSIC_DIR="$HOME/Música"
# XDG_PICTURES_DIR="$HOME/Imágenes"
# XDG_VIDEOS_DIR="$HOME/Vídeos"

XDG_DIRS=(
    "XDG_DESKTOP_DIR"
    "XDG_DOWNLOAD_DIR"
    "XDG_TEMPLATES_DIR"
    "XDG_PUBLICSHARE_DIR"
    "XDG_DOCUMENTS_DIR"
    "XDG_MUSIC_DIR"
    "XDG_PICTURES_DIR"
    "XDG_VIDEOS_DIR"
)

AYUDA="Script encargado de proporcionar el valor de las variables XDG_DIR en caso de que no existan."
AYUDA+="\nPueden pasarse dos parámetros.  Las opciones serían las siguientes:"
AYUDA+="\n\t0) En el caso de no pasar parámetros, se devolverá una lista de los XDG_DIRS del usuario gráfico."
AYUDA+="\n\t1) En el caso de pasar sólo el primer parámetro, el usuario gráfico, se pasará una lista de los XDG_DIRS del usuario gráfico indicado."
AYUDA+="\n\t2) Se puede pasar como segundo parámetro el valor de la variable XDG_DIR que se desea averiguar: ${XDG_DIRS[*]}."
EJEMPLOS=("${0} # Devuelve la lista de XDG_DIRS del usuario gráfico")
EJEMPLOS+=("${0} \"docente\" # Devuelve la lista de XDG_DIRS del usuario docente")
EJEMPLOS+=("${0} \"docente\" \"XDG_DESKTOP_DIR\" # Devuelve la ruta del directorio del DESKTOP del usuario docente")
vx-check_need_help "${1}" &&
    vx-show_help "${0}" "${AYUDA}" "${EJEMPLOS[@]}" &&
    exit 0

# Comprobamos si se pasa como parámetro un usuario:
USUARIO="${1:-$(vx-usuario-grafico)}"
! getent passwd "${USUARIO}" >/dev/null 2>&1 && exit 1
HOMEUSU="$(vx-home-usuario-grafico "${USUARIO}")"

# Averiguamos a través de ~/.config/user-dirs.dirs el nombre del XDG_DIR:
FICHDIRS="${HOMEUSU}/.config/user-dirs.dirs"
[[ ! -f "${FICHDIRS}" ]] && exit 2
if [[ "${2}" ]]; then
    XDG_DIR_RES="$(crudini --get "${FICHDIRS}" '' "${2}")"
    RUTA="${HOMEUSU}/$(basename ${XDG_DIR_RES//\"/})"
    [ -d "${RUTA}" ] && echo "${RUTA}" || exit 1
else
    XDG_DIR_RES=()
    for VAR in "${XDG_DIRS[@]}"; do
        DIR="$(crudini --get "${FICHDIRS}" '' "${VAR}")"
        RUTA="${HOMEUSU}/$(basename ${DIR//\"/})"
        [ -d "${RUTA}" ] && XDG_DIR_RES+=("${RUTA}")
    done
    echo "${XDG_DIR_RES[@]}"
fi

exit 0
