#!/bin/bash
# Script encargado de la diversión de ficheros por parte de paquetes:

function ayuda() {
    echo "#> Debes pasar 3 parámetros: 
    1) PACKAGE: paquete que hace el divert
    2) ACCION: add|remove
    3) DIR_DESTINO_FICHEROS_ORIGINALES: directorio de destino de los archivos a divertir"
}

# Comprobamos los parámetros pasados:
[[ -z "${3}" || "${1}" =~ ^-h$|^--help$ ]] && ayuda && exit 0

# Divertimos los ficheros del sistema que puedan interesar:
PACKAGE="${1}"
ACCION="${2}" # add|remove
DIR_DESTINO_FICHEROS_ORIGINALES="${3}"

[[ ! -d "${DIR_DESTINO_FICHEROS_ORIGINALES}" ]] && \
echo "#> No existe el directorio de destino de los archivos divertidos: ${DIR_DESTINO_FICHEROS_ORIGINALES}. Lo creamos." && \
mkdir -p "${DIR_DESTINO_FICHEROS_ORIGINALES}"

shift 3
FICHEROS=( "${@}" )

case "${ACCION}" in
    "add" )
        for FICHERO in "${FICHEROS[@]}"; do
            DIR_ORIGEN="$(dirname "${FICHERO}")"
            _FILE="$(basename "${FICHERO}")"
            MENSAJE="Divert de ${DIR_ORIGEN}/${_FILE}"
            if ! (dpkg-divert --list | grep -q "${DIR_ORIGEN}/${_FILE}"); then
                echo "=> No existe. Vamos a intentarlo: ${MENSAJE}"
                [[ -f "${DIR_ORIGEN}/${_FILE}" ]] && \
                dpkg-divert --add --package "${PACKAGE}" --rename \
                --divert "${DIR_DESTINO_FICHEROS_ORIGINALES}/${_FILE}.orig" "${DIR_ORIGEN}/${_FILE}" && \
                echo "#> Se ha divertido: ${DIR_ORIGEN}/${_FILE} => ${DIR_DESTINO_FICHEROS_ORIGINALES}/${_FILE}.orig"
                [ ! -e "${DIR_ORIGEN}/${_FILE}" -o -L "${DIR_ORIGEN}/${_FILE}" ] &&
                {
                    ln -sf "/usr/share/divert${DIR_ORIGEN}/${_FILE}" "${DIR_ORIGEN}/${_FILE}" &&
                    echo "#> Todo Ok: ${MENSAJE}"
                } ||
                echo "#> Ya existía el link: ${MENSAJE}"
            else
                echo "#> Ya existe: ${MENSAJE}"
            fi
        done
    ;;
    "remove" )
        for FICHERO in "${FICHEROS[@]}"; do
            DIR_ORIGEN="$(dirname "${FICHERO}")"
            _FILE="$(basename "${FICHERO}")"
            if dpkg-divert --list | grep -q "${DIR_ORIGEN}/${_FILE}"; then
                MENSAJE="Eliminamos el divert de ${_FILE}"
                echo "=> ${MENSAJE}"
                [ -e "${DIR_ORIGEN}/${_FILE}" ] && rm -f "${DIR_ORIGEN}/${_FILE}"
                dpkg-divert --remove --package "${PACKAGE}" --rename \
                --divert "${DIR_DESTINO_FICHEROS_ORIGINALES}/${_FILE}.orig" "${DIR_ORIGEN}/${_FILE}" &&
                echo "=> Todo Ok: ${MENSAJE}"
            fi
        done
    ;;
    * ) ayuda ;;
esac

exit 0