#!/bin/bash

# desc: A partir de un JSON genera otros tantos con el nombre y contenido de las diferentes secciones o claves primarias que contiene el principal

help() {
    echo "#> $(basename "${0}"): A partir de un JSON genera otros tantos con el nombre y contenido de las diferentes secciones o claves primarias que contiene el principal."
    echo ">> Es necesario pasar parámetros para indicar que deseamos hacer."
    echo -e "\t'-f': Indica la ruta del fichero JSON principal del cual estraer las secciones o claves principales."
    echo -e "\t'-d': Indica el directorio destino donde se almacenarán los JSON resultantes con las diferentes secciones o claves primarias encontradas."
    echo "#> Uso: $(basename "${0}") [-f fichero-principal.json] [-d dir-destino]"
    echo -e "Ej. $(basename "${0}") '-f' '/tmp/mi-fichero.json' '-s' '/tmp/destino'"
    exit 1
}

error() {
    echo "#> Error: ${1}"
    help
}

while getopts :hf:d: OPT; do
    case "${OPT}" in
        f) FICH_JSON="${OPTARG}" ;;
        d) DIR_DESTINO="${OPTARG}" ;;
        \?) help ;;
        :) help ;;
        h | *) help ;;
    esac
done

# 1) Comprobamos que se han indicado ambos parámetros:
[[ ! "${DIR_DESTINO}" || ! "${FICH_JSON}" ]] && \
error "Debes pasar dos parámetros al script"

# Si sólo queremos guardar el contenido de la las claves primarias:
# jq -c 'to_entries[]' "${FICH_JSON}" | while read -r entry; do
#     key=$(echo "$entry" | jq -r '.key')
#     echo "$entry" | jq '.value' > "${DIR_DESTINO}/${key}.json"
# done

# Si queremos guardar en el archivo auxiliar JSON tanto la clave como su valor:
jq -c 'to_entries[]' "${FICH_JSON}" | while read -r entry; do
    key=$(echo "$entry" | jq -r '.key')
    echo "$entry" | jq --arg k "$key" '{($k): .value}' > "${DIR_DESTINO}/${key}.json"
done

echo "#> ${FICH_JSON}: Se han generado los siguientes ficheros JSON"
ls -1 "${DIR_DESTINO}"

exit 0