#!/usr/bin/env bash
# 06-laravel — APP_KEY, autoload/package discovery, schema, bucket S3, caches e reload.
set -Eeuo pipefail
# shellcheck source=../lib/common.sh
. "$(dirname "$0")/../lib/common.sh"

phase_begin "06-laravel"

run "${COMPOSE[@]}" exec -T php-fpm php artisan optimize:clear

if [ -z "$(env_value APP_KEY)" ]; then
    run "${COMPOSE[@]}" exec -T php-fpm php artisan key:generate --force
    if [ "$DRY_RUN" = 0 ] && [ -z "$(env_value APP_KEY)" ]; then
        die "APP_KEY continuou vazia após key:generate"
    fi
fi

# Com vendor + APP_KEY + banco de pé: package discovery (post-autoload-dump) pode rodar.
run "${COMPOSE[@]}" exec -T php-fpm composer dump-autoload --optimize --classmap-authoritative --no-dev

# Em banco novo a tabela de migrations ainda não existe: `migrate:status` sai 1. O status
# é evidência, não pré-condição; o `migrate` abaixo é quem cria/aplica.
if ! "${COMPOSE[@]}" exec -T php-fpm php artisan migrate:status; then
    warn "migrate:status indisponível (banco ainda sem tabela de migrations); seguindo para o migrate."
fi
run "${COMPOSE[@]}" exec -T php-fpm php artisan migrate --force --isolated

run "${COMPOSE[@]}" exec -T php-fpm php artisan storage:ensure-bucket --no-interaction
if [ -n "$OFFSITE_MEDIA_BUCKET_V" ]; then
    run "${COMPOSE[@]}" exec -T php-fpm php artisan storage:ensure-bucket --disk=offsite-media --optional
fi

run "${COMPOSE[@]}" exec -T php-fpm php artisan core:cache-modules
run "${COMPOSE[@]}" exec -T php-fpm php artisan optimize

# OPcache de produção tem validate_timestamps=0: sem o USR2 os workers seguem com o
# código/config antigos. O tini (init: true) repassa o sinal ao master do FPM.
run "${COMPOSE[@]}" exec -T php-fpm sh -c 'kill -USR2 1'
run "${COMPOSE[@]}" exec -T php-fpm php artisan queue:restart

phase_end
