#!/usr/bin/env bash

# 80 生产节点 Sub2API 启动脚本。
# 用途：作为 /srv 统一运行态的唯一启动入口，固定从 current/backend 启动，
# 并从 shared/env 读取环境变量，避免继续依赖 /home/admin/docker-projects/sub2api。

set -euo pipefail

BASE_DIR="/srv/sub2api-80"
CURRENT_LINK="$BASE_DIR/current"
DEFAULT_ENV_FILE="$BASE_DIR/shared/env/sub2api-80.env"
DEFAULT_DATA_DIR="$BASE_DIR/shared/data"
RELEASE_DIR_OVERRIDE="${RELEASE_DIR_OVERRIDE:-}"

log() {
  printf '[sub2api-80 start] %s\n' "$*"
}

fail() {
  printf '[sub2api-80 start][错误] %s\n' "$*" >&2
  exit 1
}

if [[ -n "$RELEASE_DIR_OVERRIDE" ]]; then
  CURRENT_DIR="$(readlink -f "$RELEASE_DIR_OVERRIDE" 2>/dev/null || true)"
else
  CURRENT_DIR="$(readlink -f "$CURRENT_LINK" 2>/dev/null || true)"
fi

[[ -n "$CURRENT_DIR" ]] || fail "current 链接不存在：$CURRENT_LINK"
[[ -d "$CURRENT_DIR" ]] || fail "current 目标不是目录：$CURRENT_DIR"
[[ "$CURRENT_DIR" == "$BASE_DIR"/releases/* ]] || fail "current 未指向 releases 目录：$CURRENT_DIR"

BACKEND_DIR="$CURRENT_DIR/backend"
BIN_PATH="$BACKEND_DIR/server"
FRONTEND_DIST="$CURRENT_DIR/frontend-dist"
ENV_FILE="${ENV_FILE:-$DEFAULT_ENV_FILE}"

[[ -f "$ENV_FILE" ]] || fail "缺少环境文件：$ENV_FILE"
[[ -d "$BACKEND_DIR" ]] || fail "缺少 backend 目录：$BACKEND_DIR"
[[ -x "$BIN_PATH" ]] || fail "缺少可执行文件：$BIN_PATH"
[[ -d "$FRONTEND_DIST" ]] || fail "缺少前端目录：$FRONTEND_DIST"

log "加载环境文件：$ENV_FILE"
set -a
source "$ENV_FILE"
set +a

export DATA_DIR="${DATA_DIR:-$DEFAULT_DATA_DIR}"
mkdir -p "$DATA_DIR" "$DATA_DIR/logs" "$BASE_DIR/shared/logs" "$BASE_DIR/shared/run"

cd "$BACKEND_DIR"

log "启动 release：$CURRENT_DIR"
log "执行二进制：$BIN_PATH"
log "监听地址：${SERVER_HOST:-127.0.0.1}:${SERVER_PORT:-8090}"
log "运行数据目录：$DATA_DIR"

exec "$BIN_PATH"
