#!/usr/bin/env bash
set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
source "${SCRIPT_DIR}/common.sh"

start_tailscaled() {
  local pid

  require_command tailscaled
  require_command tailscale

  if [[ -f "${DEV_PROM_E2E_TAILSCALE_PID_FILE}" ]]; then
    pid="$(cat "${DEV_PROM_E2E_TAILSCALE_PID_FILE}")"
    if [[ -n "${pid}" ]] && kill -0 "${pid}" >/dev/null 2>&1; then
      echo "[dev-prom-e2e] reusing userspace tailscaled (pid ${pid})"
      return 0
    fi
    rm -f "${DEV_PROM_E2E_TAILSCALE_PID_FILE}"
  fi

  rm -f "${DEV_PROM_E2E_TAILSCALE_SOCKET}"

  echo "[dev-prom-e2e] starting userspace tailscaled..."
  tailscaled \
    --socket="${DEV_PROM_E2E_TAILSCALE_SOCKET}" \
    --statedir="${DEV_PROM_E2E_TAILSCALE_STATE_DIR}" \
    --tun=userspace-networking \
    --socks5-server="127.0.0.1:${DEV_PROM_E2E_TAILSCALE_PROXY_PORT}" \
    --outbound-http-proxy-listen="127.0.0.1:${DEV_PROM_E2E_TAILSCALE_PROXY_PORT}" \
    >"${DEV_PROM_E2E_TAILSCALE_LOG_FILE}" 2>&1 &
  echo $! > "${DEV_PROM_E2E_TAILSCALE_PID_FILE}"

  if ! wait_for_path "${DEV_PROM_E2E_TAILSCALE_SOCKET}" 20; then
    echo "❌ tailscaled socket did not appear: ${DEV_PROM_E2E_TAILSCALE_SOCKET}" >&2
    echo "tailscaled logs: ${DEV_PROM_E2E_TAILSCALE_LOG_FILE}" >&2
    exit 1
  fi
}

up_tailscale() {
  local authkey
  local state_file
  local args=(
    up
    --hostname="${DEV_PROM_E2E_TAILSCALE_HOSTNAME}"
    --accept-dns=false
    --accept-routes=false
  )

  state_file="$(tailscale_state_file)"
  authkey="$(read_tailscale_authkey)"

  if [[ ! -f "${state_file}" && -z "${authkey}" ]]; then
    echo "❌ set DEV_PROM_E2E_TAILSCALE_AUTHKEY or DEV_PROM_E2E_TAILSCALE_AUTHKEY_FILE for first-time login" >&2
    exit 1
  fi

  if [[ -n "${authkey}" ]]; then
    args+=(--auth-key="${authkey}")
  fi

  echo "[dev-prom-e2e] bringing up isolated tailscale node..."
  tailscale_cli "${args[@]}"
}

open_funnel() {
  echo "[dev-prom-e2e] publishing Grafana through Funnel..."
  tailscale_cli funnel \
    --bg \
    --yes \
    --https="${DEV_PROM_E2E_TAILSCALE_FUNNEL_PORT}" \
    "http://127.0.0.1:${DEV_PROM_E2E_GRAFANA_PORT}"
}

echo "================================================================"
echo " dev-prom-e2e funnel up"
echo "================================================================"

if [[ "${DEV_PROM_E2E_GRAFANA_ADMIN_PASSWORD}" == "admin" ]]; then
  echo "❌ refusing to expose Grafana with the default admin password" >&2
  echo "   set DEV_PROM_E2E_GRAFANA_ADMIN_PASSWORD to a temporary strong password" >&2
  exit 1
fi

"${SCRIPT_DIR}/up.sh"
start_tailscaled
up_tailscale
open_funnel

echo ""
echo "✅ dev-prom-e2e Grafana is exposed through Tailscale Funnel"
echo "Tailscale socket: ${DEV_PROM_E2E_TAILSCALE_SOCKET}"
echo "tailscaled logs:  ${DEV_PROM_E2E_TAILSCALE_LOG_FILE}"
echo ""
tailscale_cli funnel status
