#!/bin/bash

uso () {
    echo "=> Script que permite actualizar el valor de un parámetro de una sección de la lista del Json de descripción del centro."
    echo "=> Deben pasarse 5 parámetros:"
    echo "=> 1) El Json de descripción del centro"
    echo "=> 2) El parámetro principal donde buscar: p.e. ebooks"
    echo "=> 3) El parámetro secundario donde buscar: p.e. Icon"
    echo "=> 4) Valor asignado al parametro secundario buscado: p.e. /media/profesores/icon.png"
    echo "=> 5) Nuevo valor del parametro secundario a asignar: p.e. mi-otro-icono"
    echo "Ej. vx-jq-update-json usr/share/vitalinux/conf-centro/vx-centro.conf.json ebooks icon /media/profesores/.libros-digitales/libros-frances/CESTADIREA2/CESTADIREA2.jpg CESTADIREA2"
}

(( ${#} != 5 )) && uso && exit 1

# Comprobamos que tiene instalado el paquete moreutils para poder usar la utilidad sponge:
if ! ( dpkg -l | tr -s " " " " | cut -d" " -f2 | grep ^moreutils > /dev/null 2>&1 ) ; then
    echo -e "=> Debes instalar el paquete moreutils para usar sponge: \n\tsudo apt-get install moreutils"
fi

#RUTA="/usr/share/vitalinux/conf-centro/vx-centro.conf.json"
[ ! -z "${1}" ] && [ -f "${1}" ] && \
    {
        echo "=> Comprobamos el fichero pasado como FICHJSON: ${1}"
        #jq -e < "${1}" > /dev/null 2>&1 && \
        python -m json.tool "${1}" /dev/null 2>&1 && \
        FICHJSON="${1}" && \
        echo "=> Se ha adoptado con FICHJSON: ${FICHJSON}" || \
        {
            echo "=> Problema con FICHJSON: ${FICHJSON}" ;
            exit 1;
        }
    } || \
    {
        uso && exit 1;
    }

echo "=> Vamos a trabajar con el archivo: ${FICHJSON}"

# 1) Comprobamos el parámetro principal indicado:
PARAM1="${2}"
NUM1="$(jq ".${2}.lista | length" "${FICHJSON}")"
echo "=> Hay una lista de ${NUM1} conjuntos de ${2} para comprobar el parámetro secundario ${3} ..."

# 2) Hacemos un bucle para comprobar el parámetro secundario indicado:
PARAM2="${3}"
VALORANT2="\"${4}\""
VALORNEW2="${5}"
CONT1=0
while (( ${CONT1} < ${NUM1} )) ; do
    CONT2=0
    VALORPARAM2="$(jq ".${2}.lista[${CONT1}].${3}" "${FICHJSON}")"
    # Comprobamos si el valor del parámetro secundario coincide con el indicado:
    # De ser así actualizaremos su valor por el valor indicado como 5 parámetro
    echo "=> Vamos a comprobar: ${VALORANT2} == ${VALORPARAM2}"
    [[ "${VALORANT2}" == "${VALORPARAM2}" ]] && \
    echo "=> Coincidencia!!" && \
    jq ". | \
        .${2}.lista[${CONT1}].${3} = \"${VALORNEW2}\"" \
        "${FICHJSON}" | sponge "${FICHJSON}" && \
    echo "=> Se ha actualizado \"${2}.lista[${CONT1}].${3}\": ${VALORANT2} => ${VALORNEW2}"
    ((CONT1++))
done

