#!/bin/sh
# OneTV Server — Synology DSM 7 package (run as the package user).
PKG="${SYNOPKG_PKGNAME:-onetv-server}"
DEST="${SYNOPKG_PKGDEST:-/var/packages/$PKG/target}"
VAR="${SYNOPKG_PKGVAR:-/var/packages/$PKG/var}"
PID="$VAR/onetv-server.pid"
LOG="$VAR/onetv-server.log"
SHARE="/var/packages/$PKG/shares/OneTV Server"

binary() {
    case "$(uname -m)" in
        x86_64|amd64) echo "$DEST/bin/onetv-server-amd64" ;;
        aarch64|arm64) echo "$DEST/bin/onetv-server-arm64" ;;
        armv7*|armv8l) echo "$DEST/bin/onetv-server-armv7" ;;
        *) echo "" ;;
    esac
}

running() { [ -f "$PID" ] && kill -0 "$(cat "$PID")" 2>/dev/null; }

case "$1" in
start)
    running && exit 0
    BIN=$(binary)
    [ -x "$BIN" ] || { echo "unsupported CPU: $(uname -m)" > "$SYNOPKG_TEMP_LOGFILE"; exit 1; }
    mkdir -p "$VAR/data"
    REC="$SHARE"; [ -d "$REC" ] || REC="$VAR/recordings"
    mkdir -p "$REC"
    [ -f "$LOG" ] && [ "$(wc -c < "$LOG")" -gt 10485760 ] && mv -f "$LOG" "$LOG.1"
    TZ="${TZ:-$(cat /etc/TZ 2>/dev/null)}" nohup "$BIN" serve --data "$VAR/data" --recordings "$REC" \
        >> "$LOG" 2>&1 &
    echo $! > "$PID"
    sleep 1
    running
    ;;
stop)
    if running; then
        kill "$(cat "$PID")"
        i=0; while running && [ $i -lt 20 ]; do sleep 0.5; i=$((i + 1)); done
        running && kill -9 "$(cat "$PID")"
    fi
    rm -f "$PID"
    exit 0
    ;;
status)
    running && exit 0 || exit 3
    ;;
log)
    echo "$LOG"
    ;;
*)
    exit 1
    ;;
esac
