#!/bin/bash

set -e

# === Chemins ===
ROOT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")/../../../" && pwd)"
COMPOSER_FILE="$ROOT_DIR/composer.json"
LOCK_FILE="$ROOT_DIR/composer.lock"
GITIGNORE_FILE="$ROOT_DIR/.gitignore"
THEME_DIR="$ROOT_DIR/web/app/themes"

# === Trouver le thème actif (premier dossier dans themes) ===
ACTIVE_THEME=$(ls "$THEME_DIR" | head -n 1)
THEME_PATH="$THEME_DIR/$ACTIVE_THEME"
THEME_COMPOSER="$THEME_PATH/composer.json"

if [ ! -f "$THEME_COMPOSER" ]; then
  echo "❌ Aucun composer.json trouvé dans le thème actif ($ACTIVE_THEME)"
  exit 1
fi

echo
echo "📦 Fusion des dépendances de $ACTIVE_THEME vers la racine..."

# === Fusion des dépendances, repositories ET autoload psr-4 du thème vers composer.json racine ===
TMP_COMPOSER="$COMPOSER_FILE.tmp"
jq --argfile theme "$THEME_COMPOSER" --arg prefix "web/app/themes/$ACTIVE_THEME/" '
  # require
  .require += ($theme.require // {}) |

  # repositories
  ( .repositories = ( ( .repositories // [] ) + ( $theme.repositories // [] ) ) ) |

  # autoload psr-4 : merge et réécrit les chemins du thème avec le prefix projet
  (
    .autoload = (
      (.autoload // {}) as $rootAutoload
      |
      (
        $rootAutoload["psr-4"] // {}
      ) as $rootPsr
      |
      (
        ($theme.autoload["psr-4"] // {})
        | with_entries(.value = ($prefix + (.value // "")))
      ) as $themePsr
      |
      # merge root + theme (le thème peut écraser les clés existantes, ex: "App\\")
      ($rootAutoload + { "psr-4": ($rootPsr + $themePsr) })
    )
  )
' "$COMPOSER_FILE" > "$TMP_COMPOSER" && mv "$TMP_COMPOSER" "$COMPOSER_FILE"

echo "✅ Dépendances + repositories + autoload psr-4 fusionnés"

# === Suppression des entrées indésirables ===
echo
echo "🧹 Nettoyage du composer.json racine..."

TMP_COMPOSER="$COMPOSER_FILE.tmp"
jq "
  .require |= with_entries(select(
    .key != \"wpengine/advanced-custom-fields-pro\" and
    .key != \"myclientisrich/$ACTIVE_THEME\"
  ))
  | .repositories |=
    if type == \"array\" then
      map(select(
        (.url != \"https://connect.advancedcustomfields.com\")
        and
        ( (.type != \"vcs\") or (.url | startswith(\"git@gitlab.com:myclientisrich\") | not) )
      )) | unique_by(.url)
    elif type == \"object\" then
      with_entries(select(
        (.value.url != \"https://connect.advancedcustomfields.com\")
        and
        (
          (.value.type != \"vcs\")
          or (.value.url | startswith(\"git@gitlab.com:myclientisrich\") | not)
        )
      ))
    else . end
" "$COMPOSER_FILE" > "$TMP_COMPOSER" && mv "$TMP_COMPOSER" "$COMPOSER_FILE"

echo "✅ Entrées supprimées"

echo
echo "🧼 Nettoyage des installer-paths (themes)..."

TMP_COMPOSER="$COMPOSER_FILE.tmp"
jq '
  if (.extra and .extra["installer-paths"]) then
    .extra["installer-paths"] |= with_entries(
      select(.key != "web/app/themes/{$name}/")
    )
  else .
  end
' "$COMPOSER_FILE" > "$TMP_COMPOSER" && mv "$TMP_COMPOSER" "$COMPOSER_FILE"

echo "✅ Chemin du thème supprimé de installer-paths"

# === Déplacement d'ACF Pro vers mu-plugins ===
echo
echo "📂 Déplacement d'ACF Pro vers mu-plugins..."

ACF_SRC="$ROOT_DIR/web/app/plugins/advanced-custom-fields-pro"
ACF_DEST="$ROOT_DIR/web/app/mu-plugins/acf-pro"

if [ -d "$ACF_SRC" ]; then
  mkdir -p "$ACF_DEST"
  rsync -a "$ACF_SRC/" "$ACF_DEST/"
  echo "✅ ACF Pro copié vers mu-plugins"

  # === Génération du loader mu-plugin pour ACF ===
  echo
  echo "🧠 Génération du mu-plugin loader pour ACF..."

  LOADER_FILE="$ROOT_DIR/web/app/mu-plugins/load-acf.php"

  cat > "$LOADER_FILE" <<EOL
<?php
/**
 * Mu-plugin loader for ACF Pro.
 */
\$acf_path = __DIR__ . '/acf-pro/acf.php';

if (file_exists(\$acf_path)) {
    require_once \$acf_path;
}
EOL

  echo "✅ Loader créé : mu-plugins/load-acf.php"

else
  echo "⚠️ ACF Pro non trouvé dans plugins, rien déplacé."
fi

# === Suppression des fichiers inutiles du thème après le blabla composer ===
echo
echo "🗑️ Suppression des fichiers devenus inutiles du thème (composer.json, auth.json.example)..."

AUTH_EXAMPLE="$THEME_PATH/auth.json.example"

# -f pour éviter d'exploser si déjà absent
rm -f "$THEME_COMPOSER" || true
rm -f "$AUTH_EXAMPLE" || true

echo "✅ Fichiers supprimés dans $ACTIVE_THEME"

# === Ajout au .gitignore : thème actif + mu-plugins + vendors internes ===
echo
echo "📄 Mise à jour du .gitignore..."

GITIGNORE_MARKER="# server-ready.sh"
THEME_GITIGNORE_LINE="!web/app/themes/$ACTIVE_THEME/"
MU_PLUGINS_LINE="!web/app/mu-plugins/"
MU_VENDOR_LINE="!web/app/mu-plugins/*/vendor/"

if ! grep -Fxq "$GITIGNORE_MARKER" "$GITIGNORE_FILE"; then
  echo -e "\n$GITIGNORE_MARKER" >> "$GITIGNORE_FILE"
fi

if ! grep -Fxq "$THEME_GITIGNORE_LINE" "$GITIGNORE_FILE"; then
  echo "$THEME_GITIGNORE_LINE" >> "$GITIGNORE_FILE"
fi

if ! grep -Fxq "$MU_PLUGINS_LINE" "$GITIGNORE_FILE"; then
  echo "$MU_PLUGINS_LINE" >> "$GITIGNORE_FILE"
fi

if ! grep -Fxq "$MU_VENDOR_LINE" "$GITIGNORE_FILE"; then
  echo "$MU_VENDOR_LINE" >> "$GITIGNORE_FILE"
fi

echo "📝 .gitignore mis à jour pour inclure $ACTIVE_THEME, mu-plugins et leurs vendors"

# === Dump autoload si composer dispo ===
if command -v composer >/dev/null 2>&1; then
  echo
  echo "🔁 composer dump-autoload…"
  (cd "$ROOT_DIR" && composer dump-autoload -o || true)
fi

echo
echo "✅ Terminé."
