#!/usr/bin/env sh
set -eu

cd /var/www/html

mkdir -p \
    bootstrap/cache \
    storage/app/public \
    storage/framework/cache \
    storage/framework/sessions \
    storage/framework/testing \
    storage/framework/views \
    storage/logs

chmod -R "${LARAVEL_CHMOD_MODE:-0775}" storage bootstrap/cache || true

if [ ! -f vendor/autoload.php ]; then
    composer install --no-interaction --prefer-dist --no-progress --no-scripts
fi

# Generate and persist a local app key for dev containers when one is missing.
if [ "${APP_ENV:-local}" != "production" ] && [ -z "${APP_KEY:-}" ]; then
    generated_app_key="$(php artisan key:generate --show --no-interaction)"

    if [ -f .env ]; then
        if grep -q '^APP_KEY=' .env; then
            sed -i.bak "s#^APP_KEY=.*#APP_KEY=${generated_app_key}#" .env && rm -f .env.bak
        else
            printf '\nAPP_KEY=%s\n' "${generated_app_key}" >> .env
        fi
    fi

    export APP_KEY="${generated_app_key}"
fi

# In local/dev containers, always clear Laravel caches so Docker env vars win.
if [ "${APP_ENV:-local}" != "production" ]; then
    php artisan optimize:clear --no-interaction || true
fi

# Rebuild package discovery after cache clear if needed.
php artisan package:discover --ansi || true

php artisan storage:link --force --no-interaction >/dev/null 2>&1 || true

exec "$@"
