#!/usr/bin/env bash
set -euo pipefail

cd /var/www/html

echo "[tenant-worker] Starting tenant worker"
echo "[tenant-worker] APP_ENV=${APP_ENV:-}"
echo "[tenant-worker] PWD=$(pwd)"
echo "[tenant-worker] PHP_BINARY=$(command -v php)"
echo "[tenant-worker] PHP_VERSION=$(php -r 'echo PHP_VERSION;')"

run_as_www_data() {
    if [ "$(id -u)" = "0" ]; then
        su -s /bin/sh www-data -c "$*"
        return
    fi

    sh -lc "$*"
}

ensure_worker_runtime_dirs() {
    echo "[tenant-worker] Ensuring writable runtime dirs"
    mkdir -p \
        var/cache \
        var/cache/prod \
        var/cache/prod/doctrine \
        var/cache/prod/doctrine/orm \
        var/cache/prod/doctrine/orm/Proxies \
        var/log \
        public/uploads \
        public/uploads/adjuntos

    if [ "$(id -u)" = "0" ]; then
        chown -R www-data:www-data var/cache var/log public/uploads
    fi
    chmod -R ug+rwX var/cache var/log public/uploads

    if ! run_as_www_data "test -w var/cache/prod/doctrine/orm/Proxies"; then
        echo "[tenant-worker] ERROR: var/cache/prod/doctrine/orm/Proxies is not writable by www-data."
        ls -ld var/cache var/cache/prod var/cache/prod/doctrine var/cache/prod/doctrine/orm var/cache/prod/doctrine/orm/Proxies || true
        exit 1
    fi

    echo "[tenant-worker] Proxies writable by www-data"
}

ensure_command_registered() {
    local list_output
    list_output="$(run_as_www_data "php bin/console list app:tenant --no-ansi" 2>&1 || true)"
    echo "$list_output"

    if echo "$list_output" | grep -q "app:tenant:jobs:work"; then
        return 0
    fi

    echo "[tenant-worker] app:tenant:jobs:work not found. Clearing Symfony cache and retrying."
    rm -rf var/cache/*
    ensure_worker_runtime_dirs
    run_as_www_data "php bin/console cache:clear --no-warmup --no-ansi"

    list_output="$(run_as_www_data "php bin/console list app:tenant --no-ansi" 2>&1 || true)"
    echo "$list_output"

    if echo "$list_output" | grep -q "app:tenant:jobs:work"; then
        return 0
    fi

    echo "[tenant-worker] ERROR: app:tenant:jobs:work is still missing after cache clear."
    echo "[tenant-worker] Check image, bind mount, APP_ENV, vendor/autoload and src/Command/TenantJobsWorkCommand.php."
    exit 1
}

ensure_worker_runtime_dirs
ensure_command_registered

echo "[tenant-worker] Command registered. Launching jobs worker."
if [ "$(id -u)" = "0" ]; then
    exec su -s /bin/sh www-data -c "php bin/console app:tenant:jobs:work $*"
fi

exec php bin/console app:tenant:jobs:work "$@"
