#!/bin/bash

ROOT_DIR="$(cd "$(dirname "$0")/../.." && pwd)"
SERVER_DIR="$ROOT_DIR/server"
LOG_DIR="${LICOS_LOG_DIR:-$ROOT_DIR/logs}"
LOG_SERVER_FILE="$LOG_DIR/server.log"
SERVER_PORT="${LICOS_BACKEND_PORT:-${SERVER_PORT:-5001}}"
PROTECTED_PORTS="${LICOS_DEV_PROTECTED_PORTS:-8080 8081 9091}"

mkdir -p "$LOG_DIR"

pipe_to_log() {
  local source="${1:-SERVER}"
  local raw_log="${2:-}"
  local line clean_line timestamp
  while IFS= read -r line || [ -n "$line" ]; do
    clean_line=$(printf '%s' "$line" | sed 's/\x1b\[[0-9;]*[mA-Za-z]//g')
    if [ -n "$raw_log" ]; then
      timestamp=$(date '+%Y-%m-%d %H:%M:%S')
      echo "[$timestamp] $clean_line" >> "$raw_log"
    fi
    printf '[%s] %s\n' "$source" "$clean_line"
  done
}

kill_old_server() {
  if ! nc -z -w 1 127.0.0.1 "$SERVER_PORT" >/dev/null 2>&1; then
    return 0
  fi
  for protected in $PROTECTED_PORTS; do
    if [ "$protected" = "$SERVER_PORT" ]; then
      echo "端口 $SERVER_PORT 是平台保护端口，不会关闭占用进程"
      return 0
    fi
  done
  if [ "${LICOS_DEV_KILL_PORTS:-0}" = "1" ]; then
    echo "正在关闭旧的 server 端口：$SERVER_PORT"
    fuser -k "${SERVER_PORT}/tcp" 2>/dev/null || echo "关闭端口进程失败或端口未找到：$SERVER_PORT"
    sleep 1
  else
    echo "端口 $SERVER_PORT 已占用，未启用 LICOS_DEV_KILL_PORTS，跳过自动关闭"
  fi
}

echo "==================== Server Dev Run ===================="
echo "Server 目录：$SERVER_DIR"
echo "Server 端口：$SERVER_PORT"
echo "日志文件：$LOG_SERVER_FILE"

kill_old_server

echo "启动 server 服务..."
cd "$SERVER_DIR"
NODE_ENV=development PORT="$SERVER_PORT" pnpm exec tsx watch ./src/index.ts 2>&1 | pipe_to_log "SERVER" "$LOG_SERVER_FILE"
