#!/usr/bin/env bash
# PROCP production entrypoint — tüm roller (app/worker/scheduler/reverb) ortak setup + CMD exec.
set -e

cd /var/www/html

# 1) .env yoksa şablondan üret + APP_KEY üret
if [ ! -f .env ]; then
    echo "[entrypoint] .env yok → .env.example'dan kopyalanıyor"
    cp .env.example .env
fi
if ! grep -qE '^APP_KEY=base64:' .env; then
    echo "[entrypoint] APP_KEY üretiliyor"
    php artisan key:generate --force --no-interaction || true
fi

# 2) İzinler (mount edilmiş storage için)
mkdir -p storage/framework/{cache,sessions,views} storage/logs bootstrap/cache
chown -R www-data:www-data storage bootstrap/cache 2>/dev/null || true
chmod -R 775 storage bootstrap/cache 2>/dev/null || true

# 3) DB hazır olana kadar bekle (DB_HOST tanımlıysa)
if [ -n "${DB_HOST:-}" ]; then
    echo "[entrypoint] DB (${DB_HOST}:${DB_PORT:-3306}) bekleniyor..."
    for i in $(seq 1 60); do
        if php -r "exit(@fsockopen(getenv('DB_HOST'), (int)(getenv('DB_PORT')?:3306)) ? 0 : 1);" 2>/dev/null; then
            echo "[entrypoint] DB hazır"; break
        fi
        sleep 2
    done
fi

# 4) storage symlink + cache temizle (installer öncesi güvenli)
php artisan storage:link --force 2>/dev/null || true
php artisan optimize:clear 2>/dev/null || true

# 5) Opsiyonel migrate (RUN_MIGRATIONS=true) — varsayılan installer/manuel yönetir
if [ "${RUN_MIGRATIONS:-false}" = "true" ] && [ "${APP_INSTALLED:-false}" = "true" ]; then
    echo "[entrypoint] migrate çalıştırılıyor"
    php artisan migrate --force --no-interaction || true
fi

# 6) Kurulu ise prod cache'i ısıt (installer sonrası)
if [ "${APP_INSTALLED:-false}" = "true" ]; then
    php artisan config:cache 2>/dev/null || true
    php artisan route:cache 2>/dev/null || true
    php artisan event:cache 2>/dev/null || true
fi

echo "[entrypoint] rol komutu başlatılıyor: $*"
exec "$@"
