#!/bin/sh
set -eu

AUTHKEY_FILE="/etc/tailscale/authkey"
LOGIN_SERVER_FILE="/etc/tailscale/login-server"

if [ ! -r "$AUTHKEY_FILE" ]; then
	echo "kvm-tailscale-bootstrap: $AUTHKEY_FILE missing or unreadable. Skipping"
	exit 0
fi

if [ ! -r "$LOGIN_SERVER_FILE" ]; then
	echo "kvm-tailscale-bootstrap: $LOGIN_SERVER_FILE missing or unreadable. Skipping"
	exit 0
fi

i=0
STATE=
while [ "$i" -lt 60 ]; do
	STATE="$(tailscale status --json 2>/dev/null |
		sed -n 's/.*"BackendState":[[:space:]]*"\([^"]*\)".*/\1/p' |
		head -n1 || true)"
	case "$STATE" in
	NeedsLogin | NeedsMachineAuth | Stopped | Running)
		break
		;;
	esac
	i=$((i + 1))
	sleep 1
done

if [ "$STATE" != "NeedsLogin" ]; then
	echo "kvm-tailscale-bootstrap: backend state ${STATE:-unavailable} is not NeedsLogin. No-op"
	exit 0
fi

AUTHKEY="$(cat "$AUTHKEY_FILE")"
LOGIN_SERVER="$(tr -d ' \t\r\n' <"$LOGIN_SERVER_FILE")"

if [ -z "$AUTHKEY" ] || [ -z "$LOGIN_SERVER" ]; then
	echo "kvm-tailscale-bootstrap: authkey or login-server is empty. Refusing to register"
	exit 1
fi

echo "kvm-tailscale-bootstrap: joining $LOGIN_SERVER as tag:bootstrap"
exec tailscale up \
	--login-server="https://$LOGIN_SERVER" \
	--authkey="$AUTHKEY" \
	--hostname=kvm-desk-0
