#!/bin/bash
# desc: generamos las imangenes/slideshow del screensaver personalizado para el centro educativo
# lastact: arturo@2025-10-03

help() {
    echo "#> ${0}: Script encargado de crear y personalizar las imágenes del slideshow del salvapantallas de centro."
    echo ">> Es posible indicar parámetros para indicar que deseamos hacer."
    echo "#> Uso de parámetros (todos opcionales):"
    echo -e "\t'-d': Directory Slideshow. Recibe como parámetro el directorio que contiene las imágenes base para el slideshow."
    echo -e "\t'-t': Time Delay. Tiempo en minutos de inactividad tras el los cuales se mostrará el salvapantallas."
    echo -e "\t'-s': Show Properties. Muestra los parámetros de configuración establecidos."
    echo "#> Uso: $0 [-l true|false] [-t minutos] [-d ruta_directorio] [-s]"
    echo -e "Ej. ${0} '-l' 'false' '-d' '/ruta/directorio/imagenes-slideshow' '-t' '15'"
    exit 1
}

DIR_BASE="/usr/share/vitalinux/conf-centro"
FICH_JSON="${DIR_BASE}/vx-centro.conf.json"
OUTDIR="${DIR_BASE}/vx-screensaver/slides_default"
while getopts :hd: OPT; do
    case "${OPT}" in
        d) OUTDIR="${OPTARG}" ;;
        \?) help ;;
        :) help ;;
        h | *) help ;;
    esac
done

[[ "$(whoami)" != "root" ]] && \
echo "#> ${0}: Se requiere ser root para crear y personalizar las imágenes del slideshow" && \
help

[[ ! -d "${OUTDIR}" ]] && mkdir -p "${OUTDIR}" && \
echo "#> ${OUTDIR}: Creamos el directorio que contendrá las slides"

if [[ -f "${FICH_JSON}" ]] ; then
    JSON_CONF_CENTRO="$(jq -r ".screensaver.personalizar" "$FICH_JSON")"
    CENTRO="$(jq -r ".centro" "$FICH_JSON")"
fi
[[ ! "${CENTRO}" || "${CENTRO}" == "null" ]] && CENTRO="Centro Educativo Vitalinux"

CURSO=( $(vx-curso-academico) )
IMAGENES=(
    "${DIR_BASE}/vx-screensaver/imgs_base_default/vx-screensaver-img1.png"
    "${DIR_BASE}/vx-screensaver/imgs_base_default/vx-screensaver-img2.png"
    "${DIR_BASE}/vx-screensaver/imgs_base_default/vx-screensaver-img3.png"
)
TEXTOS=(
    "¡Qué tengas un fabuloso Curso ${CURSO[*]}!"
    "Disfruta de las bondades del Software Libre"
    "Todo tu Software Personalizado"
)

JSON_BASE='{
    "screensaver": [
        {
            "imagen": "'"${IMAGENES[0]}"'",
            "textos": [
                { "texto": "'"${CENTRO}"'", "size": 80, "font": "Liberation-Sans" },
                { "texto": "'"${TEXTOS[0]}"'", "size": 50, "font": "Courier-New" }
            ]
        },
        {
            "imagen": "'"${IMAGENES[1]}"'",
            "textos": [
                { "texto": "'"${CENTRO}"'", "size": 80, "font": "Liberation-Sans" },
                { "texto": "'"${TEXTOS[1]}"'", "size": 50, "font": "Courier-New" }
            ]
        },
        {
            "imagen": "'"${IMAGENES[2]}"'",
            "textos": [
                { "texto": "'"${CENTRO}"'", "size": 80, "font": "Liberation-Sans" },
                { "texto": "'"${TEXTOS[2]}"'", "size": 50, "font": "Courier-New" }
            ]
        }
    ]
}'
[[ "${JSON_CONF_CENTRO}" != "true" ]] && \
JSON_CONF="${JSON_BASE}" || \
{
    echo "#> ${0}: Salimos de la configuración de las imágenes del slideshow del salvapantallas. Se personalizarás desde el paquete de centro." && \
    exit 0 ;
}

ANCHO=1920
ALTO=1080

# Contar número de diapositivas
N_SLIDES=$(jq '.screensaver | length' <<< "${JSON_CONF}")

for ((i=0; i<N_SLIDES; i++)); do
    # Leer ruta de la imagen
    IMG=$(jq -r ".screensaver[$i].imagen" <<< "${JSON_CONF}")

    # Crear fondo negro y añadir logo
    CMD="convert -size ${ANCHO}x${ALTO} xc:black"
    CMD+=" \( \"$IMG\" -resize 760x760 \) -gravity north -geometry +0+100 -composite"

    # Contar textos de esta diapositiva
    N_TEXTS=$(jq ".screensaver[$i].textos | length" <<< "${JSON_CONF}")

    # Añadir cada texto con su tamaño
    for ((j=0; j<N_TEXTS; j++)); do
        TEXTO=$(jq -r ".screensaver[$i].textos[$j].texto" <<< "${JSON_CONF}")
        SIZE=$(jq -r ".screensaver[$i].textos[$j].size" <<< "${JSON_CONF}")
        FUENTE=$(jq -r ".screensaver[$i].textos[$j].font" <<< "${JSON_CONF}")

        # Calcular offset vertical (espaciado automático)
        OFFSET=$((220 - j*100))  # Ajusta según quieras separación
        CMD+=" -gravity south -pointsize ${SIZE} -fill white -font \"${FUENTE}\" -annotate +0+${OFFSET} \"${TEXTO}\""
    done

    # Archivo de salida
    CMD+=" \"${OUTDIR}/slide_$((i+1)).png\""

    # Ejecutar comando
    eval ${CMD}
done

echo "#> Imágenes generadas en: ${OUTDIR}"
ls -lh "${OUTDIR}"


exit 0

