#!/bin/sh
set -eu
# Provisioning WordPress local : install core + plugins GraphQL headless +
# active le thème enfant. Idempotent (relançable sans casse).
WP_PATH="/var/www/html"
WP="wp --path=$WP_PATH --allow-root"

echo "→ Attente du core WordPress…"
for _ in $(seq 1 60); do
  [ -f "$WP_PATH/wp-includes/version.php" ] && break
  sleep 2
done

if [ ! -f "$WP_PATH/wp-config.php" ]; then
  # `db` est le nom du service dans le compose de DEV ; en prod la base est une
  # ressource Coolify dont l'hôte arrive par WORDPRESS_DB_HOST. Le forcer à `db`
  # écrivait une config injoignable dès que le bootstrap tournait ailleurs qu'en
  # local — ce qui est désormais le cas avec WP_AUTO_BOOTSTRAP.
  $WP config create \
    --dbname="$WORDPRESS_DB_NAME" \
    --dbuser="$WORDPRESS_DB_USER" \
    --dbpass="$WORDPRESS_DB_PASSWORD" \
    --dbhost="${WORDPRESS_DB_HOST:-db}" --skip-check
fi

# En auto-bootstrap, WordPress et sa base démarrent en parallèle : sans cette
# attente, `core install` échouerait sur une base pas encore prête.
echo "→ Attente de la base de données…"
for _ in $(seq 1 60); do
  $WP db check >/dev/null 2>&1 && break
  sleep 2
done

if ! $WP core is-installed >/dev/null 2>&1; then
  echo "→ Installation de WordPress…"
  # `:-` couvre l'unset (que `set -u` ferait échouer) comme le vide : le compose
  # prod transmet `WP_SITE_TITLE` sans valeur par défaut.
  $WP core install \
    --url="$WP_HOME" --title="${WP_SITE_TITLE:-__PROJECT_TITLE__}" \
    --admin_user="$WP_ADMIN_USER" --admin_password="$WP_ADMIN_PASSWORD" \
    --admin_email="$WP_ADMIN_EMAIL" --skip-email
fi

$WP option update home "$WP_HOME"
$WP option update siteurl "$WP_HOME"

echo "→ Suppression des plugins inutiles…"

$WP plugin delete akismet hello --allow-root || true

echo "→ Plugins de base…"

$WP plugin install \
 secure-custom-fields \
 seo-by-rank-math \
 --activate

# RankMath sort tôt de son init (container 'variables'/'manager' jamais créés) tant
# que l'assistant de configuration n'est pas marqué fait → le pont GraphQL plante
# avec "Call to a member function setup() on null" sur tout champ `seo`. On skippe
# l'assistant pour une install headless reproductible.
$WP option update rank_math_registration_skip 1 || true

echo "→ Plugins GraphQL headless…"
$WP plugin install wp-graphql --activate
# Expose editorBlocks (+ attributs) consommés par @wp-reactor/editorial.
$WP plugin install https://github.com/wpengine/wp-graphql-content-blocks/releases/download/v4.8.5/wp-graphql-content-blocks.zip --activate || true
# Pont GraphQL ↔ RankMath : expose le champ `seo` consommé par @wp-reactor/editorial.
$WP plugin install https://github.com/AxeWP/wp-graphql-rank-math/releases/download/0.3.4/wp-graphql-rank-math.zip --activate || true
$WP plugin install wpgraphql-smart-cache --activate || true
$WP plugin install wpgraphql-acf --activate || true
# Plugin headless (baké dans l'image base) : activer s'il est présent.
$WP plugin activate wp-reactor-headless || true

echo "→ Thème enfant ${CHILD_THEME}…"
$WP theme activate "$CHILD_THEME" || echo "  (thème ${CHILD_THEME} pas encore prêt, ignoré)"

# La route `/` de la webapp résout `nodeByUri("/")` : sans page d'accueil STATIQUE,
# WordPress renvoie l'archive des articles, qui n'a pas d'`editorBlocks` → home vide.
echo "→ Page d'accueil statique…"
HOME_ID=$($WP post list --post_type=page --name=accueil --field=ID --posts_per_page=1)
if [ -z "$HOME_ID" ]; then
  HOME_ID=$($WP post create --porcelain \
    --post_type=page --post_title="Accueil" --post_name="accueil" --post_status=publish \
    --post_content='<!-- wp:__BLOCK_NAMESPACE__/cta-banner {"heading":"Votre site headless est en ligne","body":"<p>Cette page vit dans WordPress. Ouvrez-la dans wp-admin, ajoutez des blocs : la home les rend via le registre du webapp.</p>","items":[{"label":"Éditer dans wp-admin","url":"/wp-admin/"}]} /-->')
fi

if [ -n "$HOME_ID" ]; then
  $WP option update show_on_front page
  $WP option update page_on_front "$HOME_ID"
fi

echo "✓ Bootstrap terminé — $WP_HOME"
