#!/bin/sh
#
# Copyright (c) 2022-2023, Jesús Daniel Colmenares Oviedo <DtxdF@disroot.org>
# All rights reserved.
#
# Redistribution and use in source and binary forms, with or without
# modification, are permitted provided that the following conditions are met:
#
# * Redistributions of source code must retain the above copyright notice, this
#   list of conditions and the following disclaimer.
#
# * Redistributions in binary form must reproduce the above copyright notice,
#   this list of conditions and the following disclaimer in the documentation
#   and/or other materials provided with the distribution.
#
# * Neither the name of the copyright holder nor the names of its
#   contributors may be used to endorse or promote products derived from
#   this software without specific prior written permission.
#
# THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"
# AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
# IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
# DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE
# FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
# DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR
# SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
# CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
# OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
# OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

. "${AJ_CONFIG}"
. "${LIBDIR}/load"

lib_load "${LIBDIR}/log"
lib_load "${LIBDIR}/check_func"
lib_load "${LIBDIR}/replace"
lib_load "${LIBDIR}/jail"

main()
{
	local args="$1"
	if lib_check_empty "${args}"; then
		lib_err ${EX_USAGE} "usage: REPLACE <file> <keyword> [<value>] [<output>]"
	fi

	# Arguments
	local args_list
	args_list=`lib_split_jailparams "${args}"` || exit $?

	local file=`printf "%s\n" "${args_list}" | head -1 | tail -n 1`
	local old=`printf "%s\n\n" "${args_list}" | head -2 | tail -n 1`
	local new=`printf "%s\n\n\n" "${args_list}" | head -3 | tail -n 1`
	local output=`printf "%s\n\n\n\n" "${args_list}" | head -4 | tail -n 1`

	if lib_check_empty "${file}" || lib_check_empty "${old}"; then
		main # usage
	fi

	if lib_check_empty "${output}"; then
		output="${file}"
	fi

	local escape_chars='`"\'

	local workdir
	local workdir_file="${MAKEJAIL_TEMPDIR}/workdir/${MAKEJAIL_CURRENT_STAGE}"
	if [ -f "${workdir_file}" ]; then
		workdir=`head -1 -- "${workdir_file}"`
	else
		workdir=
	fi

	file="${workdir}/${file}"
	file=`lib_escape_string "${file}" "" "${escape_chars}"`

	old=`lib_escape_string "${old}" "" "${escape_chars}"`

	if ! lib_check_empty "${new}"; then
		new=`lib_escape_string "${new}" "" "${escape_chars}"`
	fi

	if lib_check_empty "${output}"; then
		output="${file}"
	else
		output="${workdir}/${output}"
		output=`lib_escape_string "${output}" "" "${escape_chars}"`
	fi

	cat << EOF
lib_load "\${LIBDIR}/replace"

lib_mk_replace_var "\${APPJAIL_JAILDIR}${file}" "${old}" "${new}" "\${APPJAIL_JAILDIR}${output}"
EOF
}

main "$@"
