#!/bin/sh
# start/stop/status the managed containers (db -> companion -> invidious -> ui).
# 'start' waits for the Docker daemon and retries — at DSM boot the package
# service can start before Docker is ready, which previously left apps down
# until the next manual start.
CONTAINERS="kvtube-db kvtube-companion kvtube-invidious kvtube-ui"
DOCKER="${SYNOPKG_PKGDEST}/tool/kv-helper"

wait_docker() {
    i=0
    while [ "$i" -lt 30 ]; do
        "${DOCKER}" version >/dev/null 2>&1 && return 0
        i=$((i + 1))
        sleep 3
    done
    return 1
}

case "$1" in
    start)
        wait_docker || { echo "start-stop-status: Docker not ready" >&2; exit 1; }
        for c in ${CONTAINERS}; do
            if "${DOCKER}" inspect "${c}" >/dev/null 2>&1; then
                "${DOCKER}" start "${c}" >/dev/null 2>&1 || true
            fi
        done
        i=0
        while [ "$i" -lt 15 ]; do
            "${DOCKER}" inspect kvtube-ui 2>/dev/null | grep -q '"Status": "running"' && exit 0
            i=$((i + 1))
            sleep 1
        done
        "${DOCKER}" inspect kvtube-ui 2>/dev/null | grep -q '"Status": "running"' && exit 0
        echo "start-stop-status: UI container not running after retries" >&2
        exit 1
        ;;
    stop)
        wait_docker || exit 0
        for c in kvtube-ui kvtube-invidious kvtube-companion kvtube-db; do
            "${DOCKER}" stop "${c}" >/dev/null 2>&1 || true
        done
        ;;
    status)
        "${DOCKER}" inspect kvtube-ui 2>/dev/null | grep -q '"Status": "running"' || exit 1
        ;;
    log)
        ;;
    *)
        echo "Usage: $0 {start|stop|status}" >&2
        exit 1
        ;;
esac
exit 0