#!/bin/bash
# lastact: 2023-10-18
# desc: Gestiona el wallpaper de XFCE

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

# Help-Begin: Descripción de la ayuda de la función:
AYUDA='Ayuda: Este script permite asignar una imagen al wallpaper o resetearlo al valor por defecto. Importante a tener en cuenta:
    # 0) Debe ser ejecutado por usuario gráfico para surta efecto. En caso de que lo ejecute el root debe hacerse uso de vx-runas
    # 1) "-s|--set o -r|--reset": Como primer parámetro indicaremos que acción queremos llevar a cabo
    # 2) "ruta_imagen": Como segundo parámetro se indicará la ruta absoluta de la imagen en el caso de haber indicado -s|--set'
EJEMPLOS=("${0} \"--reset\"")
EJEMPLOS+=("${0} \"-s\" \"/usr/share/xfce4/backdrops/mi-wallpaper.png\"")
if vx-check_need_help "${1}" || [[ -z "${1}" ]] || [[ "$(vx-usuario-grafico)" != "$(whoami)" ]] ; then
    vx-show_help "${0}" "${AYUDA}" "${EJEMPLOS[@]}" && exit 1
fi
# Help-End

CANAL="xfce4-desktop"
WALLPAPER_DEFAULT="/usr/share/xfce4/backdrops/vitalinux-edu-wallpaper.png"

case "${1}" in
    "-s"|"--set") # Asiganmos el wallpaper indicado como segundo parámetro
        shift
        # Ajustamos  de nuevo las resoluciones
        RESOLUCION=$(/usr/bin/obtener-resolucion-pantalla)
        case $RESOLUCION in
            "4:3" ) # En caso de ser 4x3 la imagen, haremos una "or" lógica y buscaremos en el nombre del archivo 4x3 o 1600x1400:
                FORMATO="4x3|1600x1200" 
                ;;
            "16:9" ) # En caso de ser 16x9 la imagen, haremos una "or" lógica y buscaremos en el nombre del archivo 16x9 o 1920x1080:
                FORMATO="16x9|1920x1080"
                ;;
            * ) FORMATO="16x9|1920x1080" ;; # Por defecto dejamos la 16x9
        esac
        echo "#> Resolución detectada: ${RESOLUCION} - Formato: ${FORMATO}"
        printf "%s\n" "${@}"
        COINCIDENTES=($(printf "%s\n" "${@}" | grep -E "${FORMATO}"))
        echo "#> Coincidentes: ${COINCIDENTES[*]}"
        (( "${#COINCIDENTES[@]}" > 0 )) && \
        WALLPAPER="${COINCIDENTES[0]}" || \
        WALLPAPER="${1}"
        ACCION="Asignar wallpaper"
        ;;
    "-r"|"--reset") # Reseteamos el wallpaper al valor por defecto
        WALLPAPER="${WALLPAPER_DEFAULT}"
        ACCION="Resetar wallpaper"
        ;;
    *) vx-show_help "${0}" "${AYUDA}" "${EJEMPLOS[@]}" && exit 2
    ;;
esac

[[ ! -f "${WALLPAPER}" ]] && \
    AYUDA+="\n¡Asegurate de que la ruta de la imagen es correcta!" && \
    vx-show_help "${0}" "${AYUDA}" "${EJEMPLOS[@]}" && exit 3

OLDIFS=$IFS
IFS=$'\n'
CONFIGURACIONES=($(xfconf-query -c "${CANAL}" -l -v | grep "/last-image" | tr -s " " " "))
for CONFIGURACION in "${CONFIGURACIONES[@]}"; do
    PARAM="${CONFIGURACION% *}"
    # VALOR="${CONFIGURACION#* }"
    xfconf-query -c "${CANAL}" -p "${PARAM}" -s "${WALLPAPER}" &&
    vx-funcs-bash vx-echo_log_ok "#> ${ACCION}: Ok. Se ha configurado ${PARAM}: ${WALLPAPER}" ||
    vx-funcs-bash vx-echo_log_error "#> ${ACCION}: Error. No se ha podido configurar ${PARAM}: ${WALLPAPER}"
done
IFS=$OLDIFS
