#!/usr/bin/env bash

set -eo pipefail

IFS=$'\n'
ENTRIES=$(yq -o=json '.symlink' ${IACD_DOCUMENT} | jq -c '.[]')

case ${1} in
    "create")
        for entry in $ENTRIES; do
            entry_name=$(echo "${entry}" | jq -r '.name')
            entry_source=$(echo "${entry}" | jq -r '.source')
            entry_mode=$(echo "${entry}" | jq -r '.mode')
            entry_ownership=$(echo "${entry}" | jq -r '.ownership')
            ln -sf "${entry_source}" "${entry_name}"
            chmod "${entry_mode}" "${entry_name}"
            chown "${entry_ownership}" "${entry_name}"
            echo "Symlink ${entry_name} created"
        done
        ;;
    "update")
        if [ "${IACD_OLD_DOCUMENT}" != "" ]; then
            OLD_ENTRIES=$(yq -o=json '.symlink' ${IACD_OLD_DOCUMENT} | jq -cr '.[]')
            for old_entry in ${OLD_ENTRIES}; do
                PURGE="true"
                old_entry_name=$(echo "${old_entry}" | jq -r '.name')
                for new_entry in ${ENTRIES}; do
                    new_entry_name=$(echo "${new_entry}" | jq -r '.name')
                    if [ "${old_entry_name}" = "${new_entry_name}" ]; then
                        PURGE="false"
                        break
                    fi
                done
                if [ "${PURGE}" = "true" ]; then
                    rm -fr ${old_entry_name}
                fi
            done
        fi
        for entry in $ENTRIES; do
            entry_name=$(echo "${entry}" | jq -r '.name')
            entry_source=$(echo "${entry}" | jq -r '.source')
            entry_mode=$(echo "${entry}" | jq -r '.mode')
            entry_ownership=$(echo "${entry}" | jq -r '.ownership')
            ln -sf "${entry_source}" "${entry_name}"
            echo "Symlink ${entry_name} updated"
        done
        ;;
    "delete")
        for entry in $ENTRIES; do
            entry_name=$(echo "${entry}" | jq -r '.name')
            rm -fr "${entry_name}"
            echo "Symlink ${entry_name} deleted"
        done
        ;;
    "compare")
        for entry in $ENTRIES; do
            entry_name=$(echo "${entry}" | jq -r '.name')
            test -L "${entry_name}"
        done
        ;;
esac
