#!/bin/sh -e

if [ -f "$__object/parameter/file" ]
then
    file="$( cat "$__object/parameter/file" )"
else
    file="/$__object_id"
fi

script="$( cat "$__object/parameter/script" )"

if [ "$script" = '-' ]
then
    script="$( cat "$__object/stdin" )"
fi

# since stdin is not available in explorer, we pull file from target with explorer

file_from_target="$__object/explorer/file"

sed_cmd='sed'

if [ -f "$__object/parameter/regexp-extended" ]
then
    sed_cmd="$sed_cmd -E"
fi

# do sed dry run, diff result and if no change, then there's nothing to do
# also redirect diff's output to stderr for debugging purposes

if echo "$script" | "$sed_cmd" -f - "$file_from_target" | diff -u "$file_from_target" - >&2
then
    exit 0
fi

# we can't use -i, because it's not posix, so we fly with tempfile and cp
# and we use cp because we want to preserve destination file's attributes

# shellcheck disable=SC2016
echo 'tmp="$__object/tempfile"'

echo "$sed_cmd -f - '$file' > \"\$tmp\" << EOF"

echo "$script"

echo 'EOF'

echo "cp \"\$tmp\" '$file'"

# shellcheck disable=SC2016
echo 'rm -f "$tmp"'

echo 'change' >> "$__messages_out"

if [ -f "$__object/parameter/onchange" ]
then
    cat "$__object/parameter/onchange"
fi
