#!/bin/bash
# lastact: arturo@2022-10-07
# desc: hace una sustitución tipo sed dentro del documento indicado

function devolver_ruta_absoluta() {
    # Igual que la función vx-obtener_ruta_absoluta pero devuelve la ruta resultante independientemente de que exista o no
    # Comprobamos si la ruta es relativa o comienza por ~:
    # [[ "hola que tal" =~ ^([^/]|~) ]] && echo ... || echo ...
    [[ "${1}" =~ ^[^/] ]] && RUTA="$(pwd)/${1}"
    [[ "${1}" =~ ^~ ]] && RUTA="${1//\~/$(vx-home-usuario-grafico)}"
    [[ "${1}" =~ ^/ ]] && RUTA="${1}"
    echo "${RUTA}"
    return 0
}

uso() {
    echo "=> Debes pasar al menos un parámetro con los siguientes campos:
    vx-libreoffice_odt-sed nombre_archivo_original:nombre_archivo_resultante:patron_buscar1|patron_de_sustitucion1;patron_buscar2|patron_de_sustitucion2;patron_buscar3|patron_de_sustitucion3;..."
    echo 'Ej. vx-libreoffice_odt-sed "documento_patron-online.odt:arturo_martin_2.odt:VAR_NOMBRE|ARTURO MARTIN;VAR_DNI|1234567A;VAR_FECHA|6 de Octubre"'
}
[ -z "${1}" ] &&
    uso &&
    exit 1

until [ -z "${1}" ]; do
    ARCHIVO_ORIGINAL="$(vx-funcs-bash vx-obtener_ruta_absoluta "$(echo "${1}" | cut -d":" -f1)")"
    [ ! -f "${ARCHIVO_ORIGINAL}" ] &&
        echo "=> Debes pasar un archivo a manipular que exista" && uso && exit 1
    ARCHIVO_RESULTANTE="$(devolver_ruta_absoluta "$(echo "${1}" | cut -d":" -f2)")"
    IFS_ANT=$IFS
    # Convertimos en ARRAY los patrones de sustitución pasados como parámetro:
    IFS=';'
    PATRONES=($(echo "${1}" | cut -d":" -f3))
    IFS=$IFS_ANT
    echo "=> Los patrones son: "
    # echo "=> Vamos a editar el archivo ${ARCHIVO_ORIGINAL} y tras su edición lo dejaremos en ${ARCHIVO_RESULTANTE}"
    echo "=> Editamos el archivo: ${ARCHIVO_ORIGINAL}"
    mkdir -p "/tmp/vx-$(basename "${ARCHIVO_ORIGINAL}")"
    cd "/tmp/vx-$(basename "${ARCHIVO_ORIGINAL}")" && unzip -q "${ARCHIVO_ORIGINAL}"
    for PATRON in "${PATRONES[@]}"; do
        # echo "=> El patron es: \"${PATRON}\""
        PATRON_BUSCAR="$(echo "${PATRON}" | cut -d"|" -f1)"
        PATRON_SUSTITUCION="$(echo "${PATRON}" | cut -d"|" -f2)"
        echo "=> Buscamos el patrón: ${PATRON_BUSCAR}, y lo sustituiremos por: ${PATRON_SUSTITUCION}"
        sed -i "s/${PATRON_BUSCAR}/${PATRON_SUSTITUCION}/g" "/tmp/vx-$(basename "${ARCHIVO_ORIGINAL}")/content.xml"
    done
    cd "/tmp/vx-$(basename "${ARCHIVO_ORIGINAL}")/" && zip -qr "${ARCHIVO_RESULTANTE}" .
    cd "/tmp" && rm -Rf "/tmp/vx-$(basename "${ARCHIVO_ORIGINAL}")"
    echo "=> Resultado: \"${ARCHIVO_RESULTANTE}\""
    # Pasamos el documento a PDF:
    soffice --headless "-env:UserInstallation=file:///tmp/LibreOffice_Conversion_${USER}" \
        --convert-to pdf:writer_pdf_Export \
        --outdir "$(dirname "${ARCHIVO_RESULTANTE}")" \
        "${ARCHIVO_RESULTANTE}"
    shift
done

exit 0
