#!/usr/bin/env sh

[ -f /etc/profile ] && . /etc/profile

file="${1}"

if [ "$(command -v editor)" ] ; then
    EDITOR="${EDITOR-editor}"
else
    EDITOR="${EDITOR-vi}"
fi

[ -z "${NETDATA_USER_CONFIG_DIR}"  ] && NETDATA_USER_CONFIG_DIR="/etc/netdata"
[ -z "${NETDATA_STOCK_CONFIG_DIR}" ] && NETDATA_STOCK_CONFIG_DIR="/usr/lib/netdata/conf.d"

if [ -z "${file}" ]
then
	cat <<USAGE

USAGE:
  ${0} FILENAME

  Copy and edit the stock config file named: FILENAME
  if FILENAME is already copied, it will be edited as-is.

  The EDITOR shell variable is used to define the editor to be used.

  Stock config files at: '${NETDATA_STOCK_CONFIG_DIR}'
  User  config files at: '${NETDATA_USER_CONFIG_DIR}'

  Available files in '${NETDATA_STOCK_CONFIG_DIR}' to copy and edit:

USAGE

	cd "${NETDATA_STOCK_CONFIG_DIR}" || exit 1
	ls >&2 -R *.conf */*.conf
	exit 1

fi

file_is_in_path() {
	local file path real
	file="${1}"
	path="${2}"
	
	real="$(readlink -f "${file}")"

	# we don't have working readlink
	[ -z "${real}" ] && return 0

	if [ ! -z "${real}" ] && [ -z "$(echo "${real}" | grep -E "^${path}.*$")" ]
	then
		echo >&2 "File '${file}' is physically at '${real}', which is not in '${path}'. Aborting."
		exit 1
	fi

	return 0
}

edit() {
	echo >&2 "Editing '${1}' ..."

	# check we can edit
	file_is_in_path "${1}" "${NETDATA_USER_CONFIG_DIR}" || exit 1

	"${EDITOR}" "${1}"
	exit $?
}

copy_and_edit() {
	# check we can copy
	file_is_in_path "${NETDATA_STOCK_CONFIG_DIR}/${1}" "${NETDATA_STOCK_CONFIG_DIR}" || exit 1

	if [ ! -f "${NETDATA_USER_CONFIG_DIR}/${1}" ]
	then
		echo >&2 "Copying '${NETDATA_STOCK_CONFIG_DIR}/${1}' to '${NETDATA_USER_CONFIG_DIR}/${1}' ... "
		cp -p "${NETDATA_STOCK_CONFIG_DIR}/${1}" "${NETDATA_USER_CONFIG_DIR}/${1}" || exit 1
	fi

	edit "${NETDATA_USER_CONFIG_DIR}/${1}"
}

# make sure it is not absolute filename
c1="$(echo "${file}" | cut -b 1)"
if [ "${c1}" = "/" ] || [ "${c1}" = "." ]
then
	echo >&2 "Please don't use filenames starting with '/' or '.'"
	exit 1
fi

# already exists
if [ -f "${NETDATA_USER_CONFIG_DIR}/${file}" ]
then
	edit "${NETDATA_USER_CONFIG_DIR}/${file}"
fi

[ -f "${NETDATA_USER_CONFIG_DIR}/${file}"  ] && edit "${NETDATA_USER_CONFIG_DIR}/${file}"
[ -f "${NETDATA_STOCK_CONFIG_DIR}/${file}" ] && copy_and_edit "${file}"

echo >&2 "File '${file}' is not found in '${NETDATA_STOCK_CONFIG_DIR}'"
exit 1
