#!/usr/bin/env bash
# VayDNS Shared Utilities
# Source this file: source /opt/vaydns/utils.sh

VAYDNS_DIR="/opt/vaydns"
PID_SERVER="$VAYDNS_DIR/vaydns-server.pid"
PID_CLIENT="$VAYDNS_DIR/vaydns-client.pid"
LOG_SERVER="$VAYDNS_DIR/logs/server.log"
LOG_CLIENT="$VAYDNS_DIR/logs/client.log"

RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
CYAN='\033[0;36m'
BOLD='\033[1m'
NC='\033[0m'

vaydns_info()  { echo -e "  ${GREEN}[+]${NC} $*"; }
vaydns_warn()  { echo -e "  ${YELLOW}[!]${NC} $*"; }
vaydns_error() { echo -e "  ${RED}[✗]${NC} $*"; }
vaydns_step()  { echo -e "\n  ${CYAN}${BOLD}▶ $*${NC}"; }

vaydns_is_running() {
  local pid_file="$1"
  [[ ! -f "$pid_file" ]] && return 1
  local pid
  pid=$(cat "$pid_file" 2>/dev/null)
  [[ -z "$pid" ]] && return 1
  kill -0 "$pid" 2>/dev/null
}

vaydns_server_status() {
  if vaydns_is_running "$PID_SERVER"; then
    echo -e "  vaydns-server: ${GREEN}● RUNNING${NC}  (PID $(cat "$PID_SERVER"))"
  else
    echo -e "  vaydns-server: ${RED}○ STOPPED${NC}"
  fi
}

vaydns_client_status() {
  if vaydns_is_running "$PID_CLIENT"; then
    echo -e "  vaydns-client: ${GREEN}● RUNNING${NC}  (PID $(cat "$PID_CLIENT"))"
  else
    echo -e "  vaydns-client: ${RED}○ STOPPED${NC}"
  fi
}

vaydns_stop() {
  local pid_file="$1"
  local name="$2"
  if [[ ! -f "$pid_file" ]]; then
    vaydns_warn "$name is not running"
    return
  fi
  local pid
  pid=$(cat "$pid_file")
  if kill -TERM "$pid" 2>/dev/null; then
    sleep 1
    kill -0 "$pid" 2>/dev/null && kill -KILL "$pid" 2>/dev/null
    vaydns_info "$name stopped"
  else
    vaydns_warn "$name was not running"
  fi
  rm -f "$pid_file"
}

vaydns_tail_logs() {
  local log="$1"
  local lines="${2:-50}"
  if [[ -f "$log" ]]; then
    tail -n "$lines" "$log"
  else
    vaydns_warn "Log file not found: $log"
  fi
}

vaydns_check_deps() {
  local missing=()
  for dep in curl wget git python3; do
    command -v "$dep" &>/dev/null || missing+=("$dep")
  done
  if [[ ${#missing[@]} -gt 0 ]]; then
    vaydns_error "Missing dependencies: ${missing[*]}"
    return 1
  fi
  return 0
}

vaydns_require_root() {
  if [[ $EUID -ne 0 ]]; then
    vaydns_error "Root privileges required"
    exit 1
  fi
}

vaydns_get_pubkey() {
  local pub="$VAYDNS_DIR/keys/server.pub"
  if [[ -f "$pub" ]]; then
    cat "$pub"
  else
    vaydns_warn "No public key found at $pub"
    return 1
  fi
}

vaydns_version() {
  if [[ -f "$VAYDNS_DIR/src/go.mod" ]]; then
    grep '^module' "$VAYDNS_DIR/src/go.mod" | awk '{print $2}'
  else
    echo "unknown"
  fi
}
