#!/usr/bin/env sh
set -eu

SCRIPT_DIR=$(CDPATH= cd -- "$(dirname -- "$0")" && pwd)
APP_HOME=$(CDPATH= cd -- "$SCRIPT_DIR/.." && pwd)
CONFIG_FILE="$APP_HOME/conf/castara.conf"
LOG_DIR="$APP_HOME/logs"
RUN_DIR="$APP_HOME/run"
PID_FILE="$RUN_DIR/server.pid"

if [ -f "$CONFIG_FILE" ]; then
    . "$CONFIG_FILE"
fi

JAVA_BIN="java"
if [ -n "${JAVA_HOME:-}" ]; then
    JAVA_BIN="$JAVA_HOME/bin/java"
fi

MEDIA_SERVER_PORT="${MEDIA_SERVER_PORT:-8181}"
MEDIA_SERVER_BROWSER_HOST="${MEDIA_SERVER_BROWSER_HOST:-127.0.0.1}"
MEDIA_SERVER_OPEN_BROWSER="${MEDIA_SERVER_OPEN_BROWSER:-true}"

mkdir -p "$LOG_DIR" "$RUN_DIR"

if [ -f "$PID_FILE" ]; then
    EXISTING_PID=$(cat "$PID_FILE" 2>/dev/null || true)
    if [ -n "$EXISTING_PID" ] && kill -0 "$EXISTING_PID" 2>/dev/null; then
        printf '%s\n' "Castara is already running (PID $EXISTING_PID)."
        exit 0
    fi
fi

JAVA_ARGS="-Dmedia.server.port=$MEDIA_SERVER_PORT -Dmedia.server.browserHost=$MEDIA_SERVER_BROWSER_HOST -Dmedia.server.openBrowser=$MEDIA_SERVER_OPEN_BROWSER"

if [ -n "${MEDIA_SERVER_BIND_HOST:-}" ]; then
    JAVA_ARGS="$JAVA_ARGS -Dmedia.server.bindHost=$MEDIA_SERVER_BIND_HOST"
fi

if [ -n "${MEDIA_SERVER_ADVERTISED_HOST:-}" ]; then
    JAVA_ARGS="$JAVA_ARGS -Dmedia.server.advertisedHost=$MEDIA_SERVER_ADVERTISED_HOST"
fi

# shellcheck disable=SC2086
nohup "$JAVA_BIN" ${JAVA_OPTS:-} $JAVA_ARGS -cp "$APP_HOME/lib/*" com.maa.mediaserver.server.MainKt >> "$LOG_DIR/server.log" 2>&1 &
SERVER_PID=$!
printf '%s\n' "$SERVER_PID" > "$PID_FILE"
printf '%s\n' "Castara started (PID $SERVER_PID)."
printf '%s\n' "Browser: http://$MEDIA_SERVER_BROWSER_HOST:$MEDIA_SERVER_PORT/"
printf '%s\n' "Log: $LOG_DIR/server.log"