#!/usr/bin/env bash
#
# scripts/init_prod.sh — inicialização de uma instalação NOVA em produção.
#
# DRY-RUN É O PADRÃO: sem --execute nada é criado, baixado, escrito ou iniciado.
# Cada fase é um arquivo em scripts/init/ (uma responsabilidade por arquivo); este
# entrypoint só valida as flags, cria o log e orquestra na ordem.
#
# Não depende de `make` (ADR-005/045: produção = Docker; os comandos são docker/compose,
# git, curl, tar e os helpers de tools/). Segredos nunca vão para argv/log.
#
# Uso: scripts/init_prod.sh [--execute] [--dry-run] [--allow-dirty] [--cache]
set -Eeuo pipefail

ROOT="$(cd "$(dirname "${BASH_SOURCE[0]}")/.." && pwd -P)"
umask 077
DRY_RUN=1
ALLOW_DIRTY=0
BUILD_NO_CACHE=1
NO_PULL=0
SCRIPT_KIND=init

usage() {
    cat <<'EOF'
scripts/init_prod.sh — primeira inicialização da estrutura (produção)

  --execute       aplica o plano (padrão: dry-run, sem nenhuma mutação)
  --dry-run       força o modo de simulação (padrão)
  --allow-dirty   permite rodar com a árvore git suja (produção deve usar um commit)
  --cache         reutiliza o cache de build do Docker (padrão: build --no-cache)
  -h, --help      esta ajuda

Fases (scripts/init/):
  00-preflight   .env, ferramentas, Docker, espaço, colisões e git
  01-identity    projeto Compose único, imagem por projeto, diretórios e marcador
  02-assets      npm ci + npm run build (imagem Node pinada)
  03-images      pull das imagens pinadas + build da imagem php-fpm
  04-composer    composer install --no-dev --no-scripts (vendor no bind)
  05-up          docker compose up -d --wait (todos os containers da estrutura)
  06-laravel     APP_KEY, autoload, migrate, bucket S3, optimize, reload/worker
  07-verify      saúde HTTP (portal/CMS), Caddy, migrações, SBOM e relatório

Pré-requisitos: .env preenchido (APP_KEY pode ficar vazia no init), docker + compose,
git, curl, tar, flock. A estrutura nasce com nome/porta/DATA_PATH próprios e NÃO
compartilha containers, rede, volumes nem a tag da imagem com outra instalação.
EOF
}

while [ $# -gt 0 ]; do
    case "$1" in
        --execute) DRY_RUN=0 ;;
        --dry-run) DRY_RUN=1 ;;
        --allow-dirty) ALLOW_DIRTY=1 ;;
        --cache) BUILD_NO_CACHE=0 ;;
        -h | --help)
            usage
            exit 0
            ;;
        *)
            printf 'init_prod: flag desconhecida: %s (use --help)\n' "$1" >&2
            exit 2
            ;;
    esac
    shift
done

export ROOT DRY_RUN ALLOW_DIRTY BUILD_NO_CACHE NO_PULL SCRIPT_KIND
# shellcheck source=scripts/lib/common.sh
. "$ROOT/scripts/lib/common.sh"

run_lifecycle init \
    00-preflight \
    01-identity \
    02-assets \
    03-images \
    04-composer \
    05-up \
    06-laravel \
    07-verify
