#!/usr/bin/env bash
# bmad-init-project.sh
# Initialise la structure BMAD d'un nouveau projet en symlinkant la carcasse centralisée.
#
# Usage : bmad-init (depuis la racine du projet)
# Ou : ./bmad-init-project.sh <chemin-absolu-du-projet>

set -euo pipefail

SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
BMAD_BASE="$(cd "$SCRIPT_DIR/../80_bmad/base" && pwd)"

# ─── Résolution du dossier projet ────────────────────────────────────────────

if [[ $# -ge 1 ]]; then
  PROJECT_ROOT="$1"
else
  PROJECT_ROOT="$(pwd)"
fi

if [[ ! -d "$PROJECT_ROOT" ]]; then
  echo "Erreur : le dossier '$PROJECT_ROOT' n'existe pas."
  exit 1
fi

if [[ ! -d "$BMAD_BASE" ]]; then
  echo "Erreur : BMAD base introuvable à '$BMAD_BASE'."
  exit 1
fi

PROJECT_NAME="$(basename "$PROJECT_ROOT")"

echo "→ Initialisation BMAD pour : $PROJECT_ROOT"

# ─── CLAUDE.md + AGENTS.md ───────────────────────────────────────────────────

"$SCRIPT_DIR/generate_project_claude.sh" "$PROJECT_NAME" "$PROJECT_ROOT"

# ─── Modules à symlinkter dans _bmad/ ────────────────────────────────────────

BMAD_MODULES=(core bmm cis tea _config)

mkdir -p "$PROJECT_ROOT/_bmad"

for module in "${BMAD_MODULES[@]}"; do
  TARGET="$PROJECT_ROOT/_bmad/$module"
  SOURCE="$BMAD_BASE/_bmad/$module"

  if [[ ! -d "$SOURCE" ]]; then
    echo "  ⚠ Module '$module' absent de la base, ignoré."
    continue
  fi

  if [[ -L "$TARGET" ]]; then
    echo "  ~ symlink déjà présent : _bmad/$module"
  elif [[ -e "$TARGET" ]]; then
    echo "  ⚠ '$TARGET' existe déjà (pas un symlink), ignoré."
  else
    ln -s "$SOURCE" "$TARGET"
    echo "  ✓ symlink créé : _bmad/$module → $SOURCE"
  fi
done

# ─── _memory : copie locale (écrite par les agents) ──────────────────────────

MEMORY_TARGET="$PROJECT_ROOT/_bmad/_memory"
MEMORY_SOURCE="$BMAD_BASE/_bmad/_memory"

if [[ -L "$MEMORY_TARGET" ]]; then
  echo "  ⚠ _bmad/_memory est un symlink — conversion en copie locale..."
  rm "$MEMORY_TARGET"
  cp -r "$MEMORY_SOURCE" "$MEMORY_TARGET"
  echo "  ✓ _memory copié localement"
elif [[ -d "$MEMORY_TARGET" ]]; then
  echo "  ~ _bmad/_memory existe déjà, non écrasé."
else
  cp -r "$MEMORY_SOURCE" "$MEMORY_TARGET"
  echo "  ✓ _memory initialisé depuis la base"
fi

# ─── .agents/ et .claude/ : symlinks à la racine du projet ──────────────────

for dir in .agents .claude; do
  TARGET="$PROJECT_ROOT/$dir"
  SOURCE="$BMAD_BASE/$dir"

  if [[ ! -d "$SOURCE" ]]; then
    echo "  ⚠ '$dir' absent de la base, ignoré."
    continue
  fi

  if [[ -L "$TARGET" ]]; then
    echo "  ~ symlink déjà présent : $dir"
  elif [[ -d "$TARGET" ]]; then
    echo "  ⚠ '$dir' existe déjà (dossier réel), ignoré. Merge manuel requis."
  else
    ln -s "$SOURCE" "$TARGET"
    echo "  ✓ symlink créé : $dir → $SOURCE"
  fi
done

# ─── _bmad-output/ : dossier local vide ─────────────────────────────────────

OUTPUT_DIR="$PROJECT_ROOT/_bmad-output"
if [[ ! -d "$OUTPUT_DIR" ]]; then
  mkdir -p "$OUTPUT_DIR"/{brainstorming,planning-artifacts,implementation-artifacts,test-artifacts}
  echo "  ✓ _bmad-output/ créé"
else
  echo "  ~ _bmad-output/ existe déjà"
fi

# ─── Résumé ──────────────────────────────────────────────────────────────────

echo ""
echo "Structure BMAD initialisée :"
echo ""
echo "  $PROJECT_ROOT/"
echo "  ├── _bmad/"
for module in "${BMAD_MODULES[@]}"; do
  echo "  │   ├── $module  → symlink (centralisé)"
done
echo "  │   └── _memory/  (local)"
echo "  ├── .agents/      → symlink (centralisé)"
echo "  ├── .claude/      → symlink (centralisé)"
echo "  └── _bmad-output/ (local)"
echo ""
echo "✓ Prêt."
