#!/bin/sh

os="$(cat "${__global:?}"/explorer/os)"

case $os in
	'alpine')
		:
		;;
	*)
		echo "This type has no implementation for $os. Aborting." >&2
		exit 1;
		;;
esac

__package "wireguard-tools-wg"

# Template configuration
private_key="$(cat "${__object:?}/parameter/privkey")"

WG_ADDRESS="$(cat "${__object:?}/parameter/address")"
WG_IFACE="${__object_id:?}"

export WG_IFACE
export WG_ADDRESS

WG_PORT=
if [ -f "${__object:?}/parameter/port" ];
then
	WG_PORT="$(cat "${__object:?}/parameter/port")"
fi
export WG_PORT

mkdir -p "${__object:?}/files/"
"${__type:?}/files/wireguard.conf.sh" "$private_key" > "${__object:?}/files/wg-${__object_id:?}.conf"

# Wireguard configuration. Configured using a block as it is also edited by
# cdist-type__wireguard_peer(7).
__directory "/etc/wireguard/"
require='__directory/etc/wireguard' \
	__file "/etc/wireguard/${__object_id:?}.conf" --state exists

require="__file/etc/wireguard/${__object_id:?}.conf" \
	__block "${__object_id:?}" --file "/etc/wireguard/${__object_id:?}.conf" \
		--text - <"${__object:?}/files/wg-${__object_id:?}.conf"

# Network configuration
__directory '/etc/network/interfaces.d'
__line source-interfaces \
	--line 'source-directory /etc/network/interfaces.d/' \
	--file '/etc/network/interfaces'

"${__type:?}/files/interface.conf.sh" > "${__object:?}/files/iif-${__object_id:?}.conf"
require="__directory/etc/network/interfaces.d __line/source-interfaces __block/${__object_id:?}" \
	__file "/etc/network/interfaces.d/${__object_id:?}.conf" \
	--source "${__object:?}/files/iif-${__object_id:?}.conf" \
	--onchange "ifup -a"
