#!/usr/bin/env bash
set -euo pipefail
REPO_DIR="/home/agent/.hermes/repos/FinanceManager"
RUNTIME_DIR="${JARVIS_FINANCE_RUNTIME_DIR:-$HOME/jarvis_runtime/finance-system}"
LOG_DIR="$RUNTIME_DIR/logs"
PID_FILE="$LOG_DIR/finance_frontend.pid"
LOG_FILE="$LOG_DIR/finance_frontend.log"
FRONTEND_PORT="${FRONTEND_PORT:-5173}"
BACKEND_PORT="${BACKEND_PORT:-8000}"
mkdir -p "$LOG_DIR"
if [[ -f "$PID_FILE" ]]; then
  PID="$(tr -cd '0-9' < "$PID_FILE" || true)"
  if [[ -n "$PID" ]] && kill -0 "$PID" 2>/dev/null; then
    kill "$PID" 2>/dev/null || true
    for _ in $(seq 1 30); do kill -0 "$PID" 2>/dev/null || break; sleep 0.2; done
    kill -9 "$PID" 2>/dev/null || true
  fi
  rm -f "$PID_FILE"
fi
if command -v fuser >/dev/null 2>&1; then fuser -k "${FRONTEND_PORT}/tcp" >/dev/null 2>&1 || true; fi
cd "$REPO_DIR/frontend"
if [[ ! -x "$REPO_DIR/frontend/node_modules/.bin/vite" ]]; then
  echo "Missing Vite dependency. Run: cd $REPO_DIR/frontend && npm install" >&2
  exit 1
fi
TAILSCALE_DNS="$(tailscale status --json 2>/dev/null | python -c 'import json,sys; data=json.load(sys.stdin); print(data.get("Self",{}).get("DNSName","").rstrip("."))' 2>/dev/null || true)"
TAILSCALE_IP="$(tailscale ip -4 2>/dev/null | head -n1 || true)"
TAILSCALE_HOST="${TAILSCALE_HOST:-${TAILSCALE_DNS:-$TAILSCALE_IP}}"
export VITE_API_BASE_URL="${VITE_API_BASE_URL:-http://${TAILSCALE_HOST:-127.0.0.1}:$BACKEND_PORT}"
if [[ -n "$TAILSCALE_HOST" ]]; then
  allowed="$TAILSCALE_HOST"
  [[ -n "$TAILSCALE_IP" && "$allowed" != *"$TAILSCALE_IP"* ]] && allowed="$allowed,$TAILSCALE_IP"
  [[ -n "$TAILSCALE_DNS" && "$allowed" != *"$TAILSCALE_DNS"* ]] && allowed="$allowed,$TAILSCALE_DNS"
  export __VITE_ADDITIONAL_SERVER_ALLOWED_HOSTS="${__VITE_ADDITIONAL_SERVER_ALLOWED_HOSTS:-$allowed}"
fi
: > "$LOG_FILE"
npm run dev -- --host 0.0.0.0 --port "$FRONTEND_PORT" > "$LOG_FILE" 2>&1 &
echo $! > "$PID_FILE"
for _ in $(seq 1 50); do
  if curl -fsS -m 2 "http://127.0.0.1:$FRONTEND_PORT/" >/dev/null 2>&1; then
    echo "frontend restart complete"
    exit 0
  fi
  sleep 0.2
done
echo "frontend restart failed healthcheck" >&2
exit 1
