#!/bin/bash
# GiteaHubSync service control（由 fnOS 应用中心在 启动/停止/查询状态 时调用）
# 守护进程以 setsid nohup 方式后台运行，pidfile 位于持久数据目录(@appdata/GiteaHubSync)

PYBIN=""
for candidate in \
    /var/apps/python312/target/bin/python3 \
    /vol1/@appcenter/python312/target/bin/python3 \
    /var/apps/python311/target/bin/python3 \
    /var/apps/python310/target/bin/python3 \
    /usr/bin/python3 \
    /usr/local/bin/python3; do
    if [ -x "$candidate" ]; then PYBIN="$candidate"; break; fi
done

# TRIM_APPDEST 由 fnOS 注入；若缺失或指向其他应用，则回退到脚本自身位置
APPDEST="${TRIM_APPDEST:-}"
if [ -z "$APPDEST" ] || [ ! -d "$APPDEST/cmd" ]; then
    APPDEST="$(cd "$(dirname "$0")/.." && pwd)"
fi
BACKEND_DIR="${APPDEST}/backend"
[ -d "$BACKEND_DIR" ] || BACKEND_DIR="${APPDEST}/target/backend"
[ -d "$BACKEND_DIR" ] || BACKEND_DIR="${APPDEST}/app/backend"
DAEMON="${BACKEND_DIR}/panel.py"

# 持久数据目录（TRIM_PKGVAR 由 fnOS 注入，通常为 /vol{n}/@appdata/GiteaHubSync）
if [ -n "${TRIM_PKGVAR}" ] && [ -d "${TRIM_PKGVAR}" ]; then
    DATA_DIR="${TRIM_PKGVAR}"
else
    DATA_DIR=""
    for candidate in \
        "${APPDEST}/../../@appdata/GiteaHubSync" \
        "${APPDEST}/var" \
        "/var/apps/GiteaHubSync/var" \
        "/vol1/@appdata/GiteaHubSync" \
        "/vol2/@appdata/GiteaHubSync"; do
        if [ -d "$candidate" ]; then DATA_DIR="$candidate"; break; fi
    done
    if [ -z "$DATA_DIR" ]; then
        DATA_DIR="${APPDEST}/../../@appdata/GiteaHubSync"
    fi
fi
PIDFILE="${DATA_DIR}/daemon.pid"

daemon_alive() {
    [ -f "$PIDFILE" ] || return 1
    local pid
    pid="$(cat "$PIDFILE" 2>/dev/null)"
    [ -n "$pid" ] || return 1
    kill -0 "$pid" 2>/dev/null
}

case "$1" in
start)
    if daemon_alive; then
        echo "GiteaHubSync daemon already running (pid $(cat "$PIDFILE"))"
        exit 0
    fi
    if [ -z "$PYBIN" ]; then
        echo "python3 runtime not found (install_dep_apps=python312)" > "${TRIM_TEMP_LOGFILE:-/dev/stderr}"
        exit 1
    fi
    mkdir -p "$DATA_DIR"
    # fnOS 解包可能放宽密钥权限，ssh 会拒绝；启动前收紧
    [ -f "${APPDEST}/ssh/id_ed25519" ] && chmod 600 "${APPDEST}/ssh/id_ed25519" 2>/dev/null
    [ -f "${DATA_DIR}/id_ed25519" ] && chmod 600 "${DATA_DIR}/id_ed25519" 2>/dev/null
    GHS_DATA_DIR="$DATA_DIR" setsid nohup "$PYBIN" "$DAEMON" >> "${DATA_DIR}/daemon.out" 2>&1 &
    for _ in 1 2 3 4 5 6 7 8 9 10; do
        if daemon_alive; then
            echo "GiteaHubSync daemon started (pid $(cat "$PIDFILE"))"
            exit 0
        fi
        sleep 0.5
    done
    echo "GiteaHubSync daemon failed to start; see ${DATA_DIR}/daemon.out" > "${TRIM_TEMP_LOGFILE:-/dev/stderr}"
    exit 1
    ;;
stop)
    if daemon_alive; then
        pid="$(cat "$PIDFILE")"
        kill "$pid" 2>/dev/null
        for _ in 1 2 3 4 5 6 7 8 9 10; do
            kill -0 "$pid" 2>/dev/null || break
            sleep 0.5
        done
        kill -9 "$pid" 2>/dev/null
        echo "GiteaHubSync daemon stopped (pid $pid)"
    else
        echo "GiteaHubSync daemon not running"
    fi
    rm -f "$PIDFILE"
    exit 0
    ;;
status)
    if daemon_alive; then
        exit 0
    fi
    exit 3
    ;;
*)
    exit 1
    ;;
esac
