#!/bin/sh
set -e

if [ ! -f "vendor/autoload.php" ]; then
    echo "Installing Composer dependencies..."
    composer install --no-interaction --prefer-dist --optimize-autoloader
fi

if [ ! -f ".env" ]; then
    cp .env.example .env
fi

if ! grep -q '^APP_KEY=base64:.\{20,\}' .env; then
    php artisan key:generate --force
fi

if ! grep -q '^JWT_SECRET=.\{20,\}' .env; then
    php artisan jwt:secret --force --no-interaction
fi

# Bind-mounted source can land as 0600/0700 (git checkout after umask 077).
# php-fpm is www-data — unreadable PHP fatal-errors before Laravel CORS
# headers, which the browser reports as a CORS failure.
if [ -d /var/www/html ]; then
    find /var/www/html \
        \( -path '/var/www/html/vendor/*' -o -path '/var/www/html/storage/*' -o -path '/var/www/html/node_modules/*' \) -prune -o \
        -type f -perm 600 ! -name '.env' ! -name '.env.*' \
        -exec chmod a+r {} + 2>/dev/null || true
    find /var/www/html \
        \( -path '/var/www/html/vendor/*' -o -path '/var/www/html/storage/*' -o -path '/var/www/html/node_modules/*' \) -prune -o \
        -type d \( -perm 700 -o -perm 710 -o -perm 711 \) \
        -exec chmod a+rx {} + 2>/dev/null || true

    mkdir -p /var/www/html/storage/framework/cache/data \
             /var/www/html/storage/framework/app \
             /var/www/html/storage/framework/sessions \
             /var/www/html/storage/framework/views \
             /var/www/html/storage/app/private/corrections \
             /var/www/html/storage/logs
    chmod -R 777 /var/www/html/storage /var/www/html/bootstrap/cache 2>/dev/null || true
fi

# PHP-FPM worker count (only used when this container runs php-fpm).
if [ "${1:-}" = "php-fpm" ]; then
    MAX_CHILDREN="${PHP_FPM_MAX_CHILDREN:-8}"
    START_SERVERS="${PHP_FPM_START_SERVERS:-2}"
    cat > /usr/local/etc/php-fpm.d/zz-workers.conf <<EOF
[www]
pm = dynamic
pm.max_children = ${MAX_CHILDREN}
pm.start_servers = ${START_SERVERS}
pm.min_spare_servers = 1
pm.max_spare_servers = ${START_SERVERS}
pm.max_requests = 500
EOF
    echo "PHP-FPM workers: max_children=${MAX_CHILDREN} start_servers=${START_SERVERS}"
fi

if [ "$DB_CONNECTION" = "mysql" ]; then
    echo "Waiting for MySQL at ${DB_HOST}:${DB_PORT:-3306}..."
    until php -r "
        try {
            new PDO(
                'mysql:host=${DB_HOST};port=${DB_PORT:-3306};dbname=${DB_DATABASE}',
                '${DB_USERNAME}',
                '${DB_PASSWORD}'
            );
            exit(0);
        } catch (Exception \$e) {
            exit(1);
        }
    "; do
        sleep 2
    done
    echo "MySQL is ready."
fi

if [ "${APP_ENV}" = "production" ]; then
    php artisan config:cache --ansi || echo "config:cache failed (continuing)"
    # Some nwidart modules declare a views path that was never created.
    # view:cache fails hard on missing dirs — create empty ones first.
    for dir in Modules/*/resources; do
        [ -d "$dir" ] || continue
        mkdir -p "$dir/views"
    done
    php artisan view:cache --ansi || true
else
    php artisan config:clear --ansi 2>/dev/null || true
fi

exec "$@"
