#!/command/with-contenv bash
# shellcheck shell=bash
# Start the Frigate service

set -o errexit -o nounset -o pipefail

# opt out of openvino telemetry
if [ -e /usr/local/bin/opt_in_out ]; then
  /usr/local/bin/opt_in_out --opt_out > /dev/null 2>&1
fi

# Logs should be sent to stdout so that s6 can collect them

# Tell S6-Overlay not to restart this service
s6-svc -O .

function set_libva_version() {
    local ffmpeg_path
    ffmpeg_path=$(python3 /usr/local/ffmpeg/get_ffmpeg_path.py)
    LIBAVFORMAT_VERSION_MAJOR=$("$ffmpeg_path" -version | grep -Po "libavformat\W+\K\d+")
    export LIBAVFORMAT_VERSION_MAJOR
}

function start_transcode_proxy() {
    (
        export TRANSCODE_PROXY_UPSTREAM="${TRANSCODE_PROXY_UPSTREAM:-http://127.0.0.1:5000}"
        export PYTHONPATH="/opt/frigate:${PYTHONPATH:-}"

        if [[ -z "${TRANSCODE_PROXY_FFMPEG:-}" ]]; then
            TRANSCODE_PROXY_FFMPEG=$(python3 /usr/local/ffmpeg/get_ffmpeg_path.py)
            export TRANSCODE_PROXY_FFMPEG
        fi

        until curl -sf -o /dev/null "${TRANSCODE_PROXY_UPSTREAM}/api/version"; do
            sleep 1
        done

        echo "[INFO] Starting transcode proxy..."
        exec python3 -m uvicorn transcode_proxy.main:app \
            --host "${TRANSCODE_PROXY_HOST:-0.0.0.0}" \
            --port "${TRANSCODE_PROXY_PORT:-5010}"
    ) &
}

echo "[INFO] Preparing Frigate..."
set_libva_version

start_transcode_proxy

echo "[INFO] Starting Frigate..."

cd /opt/frigate || echo "[ERROR] Failed to change working directory to /opt/frigate"

# Replace the bash process with the Frigate process, redirecting stderr to stdout
exec 2>&1
exec python3 -u -m frigate
