#!/usr/bin/bash
set -a
source /etc/sysconfig/romm
set +a

# Validate ROMM_BASE_PATH: reject paths that would create infinite symlink loops
for bad in /var/lib/romm/library /var/lib/romm/library/ /var/lib/romm/cache /var/lib/romm/cache/ /var/lib/romm/resources /var/lib/romm/resources/; do
    if [ "$ROMM_BASE_PATH" = "$bad" ]; then
        echo "ERROR: ROMM_BASE_PATH cannot be set to $bad"
        echo "The bridge symlinks in /var/lib/romm/ must point to a parent directory,"
        echo "not directly to library/, cache/, or resources/."
        echo "Fix: set ROMM_BASE_PATH to the directory containing those folders"
        echo "Example: ROMM_BASE_PATH=/var/lib/romm  (not /var/lib/romm/library/)"
        exit 1
    fi
done

# Bridge symlink: create /var/lib/romm/{library,cache,resources} as symlinks
# pointing to the actual ROMM_BASE_PATH directories. This allows nginx to stay
# hardcoded to /var/lib/romm/ while the user places data anywhere via
# ROMM_BASE_PATH in /etc/sysconfig/romm.
ROMM_DEFAULT_PATH=/var/lib/romm

for subdir in library cache resources; do
    target="${ROMM_BASE_PATH}/${subdir}"
    link="${ROMM_DEFAULT_PATH}/${subdir}"

    # No-op: target and link are the same path when ROMM_BASE_PATH is already
    # /var/lib/romm. Just ensure the directory exists.
    if [ "$target" = "$link" ]; then
        mkdir -p "$target"
        continue
    fi

    if [ -L "$link" ]; then
        # Update stale symlink
        if [ "$(readlink -f "$link")" != "$(readlink -f "$target" 2>/dev/null)" ]; then
            rm -f "$link"
            ln -sf "$target" "$link"
        fi
    elif [ ! -d "$link" ] && [ -d "$target" ]; then
        # Create symlink to existing target
        ln -sf "$target" "$link"
    elif [ ! -d "$link" ]; then
        # Ensure target exists, then create symlink
        mkdir -p "$target"
        ln -sf "$target" "$link"
    fi
done

cd /usr/share/romm/backend/
/usr/share/romm/backend/.venv/bin/python3 -m gunicorn main:app \
    --worker-class uvicorn.workers.UvicornWorker \
    --bind 0.0.0.0:${ROMM_PORT} \
    --workers ${WEB_SERVER_CONCURRENCY} \
    --timeout ${WEB_SERVER_TIMEOUT} \
    --keep-alive ${WEB_SERVER_KEEPALIVE} \
    --max-requests ${WEB_SERVER_MAX_REQUESTS} \
    --max-requests-jitter ${WEB_SERVER_MAX_REQUESTS_JITTER} \
    --worker-connections ${WEB_SERVER_WORKER_CONNECTIONS} \
    --access-logfile - \
    --error-logfile -
