#!/bin/sh

subdomain_reset() {
	local rand_str=$(openssl rand -base64 50 | tr -dc 'a-z0-9' | head -c 10)
	echo "subdomain set to $rand_str"

	sed -i "s/subdomain = \"\"/subdomain = \"$rand_str\"/" /etc/frpc.toml
}

prepare_toml() {
    sn=$(cat /app/config/fac.ini | awk '/sn =/{print $3}')
    [ -z "$sn" ] && sn=$(cat /app/config/fac.ini | awk -F'=' '/sn=/{print $2}')
    [ -n "$sn" ] && {
        local tmp="$(cat /etc/frpc.toml | grep USER_NAME)"
        if [ "$tmp" != "" ] 
        then
            sed -i.bak "s/USER_NAME/$sn/g" /etc/frpc.toml
        else
            local user_right="$(cat /etc/frpc.toml | grep "^user = $sn")"
            if [ "$user_right" != "" ] 
            then
                echo "user is right, no need change" 
            else
                echo "set user to $sn" 
                sed -i "s/^user = \".*\"/user = \"$sn\"/" /etc/frpc.toml
                cat /etc/frpc.toml | grep user
            fi
        fi
    }

    if grep -q '^subdomain = ""' /etc/frpc.toml
    then
		subdomain_reset
    fi
}

check_router_config() {
	local output="$(systemctl status frpc | grep -e "start error: router config conflict" | grep -v -e grep)" 
	if [ -n "${output}" ] ; then
		echo "router conflict, ready to restart"
		return 1
	fi

	return 0
}

start_frpc() {
	local max_retries=10
	local retries=0

	while [ $retries -lt $max_retries ]; do
		prepare_toml

		pkill -f "/usr/bin/frpc -c /etc/frpc.toml" 2>/dev/null
		/usr/bin/frpc -c /etc/frpc.toml &
		local pid=$!
		sleep 10

		while true ; do
			check_router_config
			local ret=$?

			if [ $ret -eq 1 ]; then
				kill $pid
				wait $pid
				sed -i "s/subdomain = \".*\"/subdomain = \"\"/" /etc/frpc.toml
				retries=$((retries + 1))
				echo "retries: $retries"
				break
			elif [ ! -e /proc/${pid}/exe ] ; then
				break
			else
				sleep 30
			fi
		done
	done

	echo "reach to max retry times: $max_retries"
	return 1
}

start_frpc
