#!/bin/sh /etc/rc.common

START=90

USE_PROCD=1

SERVICE_CWD="/etc/natfrp"
SERVICE_PATH="/usr/bin/natfrp-service"

_log() {
	echo "[$1] $2"
	logger -t "natfrp" -p "daemon.$1" "$2"
}

log_info() {
	_log "info" "$1"
}

log_err() {
	_log "err" "$1"
}

start_instance() {
	[ "$1" == "main" ] || return
	[ "$CONFIG_main_enabled" == "1" ] || return

	# Check executable & cwd
	test -d "$SERVICE_CWD" || mkdir -p "$SERVICE_CWD"

	NATFRP_SERVICE_WD=$SERVICE_CWD $SERVICE_PATH --help | grep -q natfrp-service
	if [ $? != 0 ]; then
		log_err "invalid executable, make sure you installed correct arch [$(uname -m)]"
		return 1
	fi

	# Update config file
	json_init

	local cfg_json="$SERVICE_CWD/config.json"
	if [ -f "$cfg_json" ]; then
		json_load_file "$cfg_json"
	fi

	# - Logging, log file is costy, use logger instead
	json_add_string log_file ""
	json_add_boolean log_stdout 1

	# - Token
	if [ "$CONFIG_main_token" != "" ]; then
		json_add_string token "$CONFIG_main_token"

		log_info "token updated"

		uci_set natfrp main 'token' ''
		uci_commit natfrp
	fi

	# - Web UI
	if [ "$CONFIG_main_webui" == "1" ]; then
		json_add_int webui_port "$CONFIG_main_webui_port"
		json_add_string webui_host "$CONFIG_main_webui_host"

		if [ "$CONFIG_main_check_update" == "1" ]; then
			json_add_int update_interval 604800
		else
			json_add_int update_interval "-1"
		fi

		if [ "$CONFIG_main_webui_pass" != "" ]; then
			json_add_string webui_pass "$CONFIG_main_webui_pass"

			log_info "webui key updated"

			uci_set natfrp main 'webui_pass' ''
			uci_commit natfrp
		fi
	else
		json_add_int webui_port "-1"
		json_add_int update_interval "-1"
	fi

	# - Remote Management
	json_add_boolean remote_management "$CONFIG_main_remote_mgmt"
	if [ "$CONFIG_main_remote_mgmt" == "1" ]; then
		if [ "$CONFIG_main_remote_mgmt_pass" != "" ]; then
			pass=$(NATFRP_SERVICE_WD=$SERVICE_CWD $SERVICE_PATH remote-kdf "$CONFIG_main_remote_mgmt_pass")
			if [ $? != 0 ]; then
				log_err "remote-kdf failed"
			else
				json_add_string remote_management_key "$pass"

				log_info "remote management key updated"

				uci_set natfrp main 'remote_mgmt_pass' ''
				uci_commit natfrp
			fi
			unset pass
		fi
	fi

	json_dump >"$cfg_json"
	json_cleanup

	# Configure procd
	procd_open_instance "main"

	procd_set_param respawn
	procd_set_param stdout 1
	procd_set_param stderr 1
	procd_set_param file /etc/config/natfrp

	procd_set_param command "$SERVICE_PATH" --daemon --force-root

	procd_set_param env \
		"LANG=en_US.UTF-8" \
		"NATFRP_SERVICE_WD=$SERVICE_CWD" \
		"NATFRP_FRPC_PATH=/usr/bin/natfrp-frpc" \
		"NATFRP_UPDATE_OVERRIDE=launcher-openwrt"

	procd_close_instance
}

reload_service() {
	log_info "restarting natfrp-service"
	stop
	start
}

service_triggers() {
	procd_add_reload_trigger natfrp
}

start_service() {
	config_load natfrp
	config_foreach start_instance natfrp
}
