#!/usr/bin/env bash
# =============================================================================
# 🧭 Client Indigo / Documentation — open-in-vscode.sh
# =============================================================================
# Objectif:
# - Ouvrir rapidement le dossier Indigo ou ses fichiers clés dans Visual Studio Code.
# - Fournir un contournement fiable quand les liens `vscode://file/...` du chat ne sont pas interprétés.
#
# Portée:
# - Fait: ouverture du dossier, de la documentation ou d'un chemin ciblé via la CLI `code`.
# - Ne fait pas: installer VS Code, corriger l'intégration du client de chat, modifier les fichiers ouverts.
#
# Dépendances / Prérequis:
# - Binaire `code` disponible dans l'environnement.
# - Accès au dossier parent du script (`../`).
#
# Entrées attendues:
# - Argument optionnel: `folder`, `docs`, `key`, `path <chemin>`.
# - Variable optionnelle: `VSCODE_BIN` pour surcharger la commande VS Code.
#
# Sorties:
# - Ouvre le dossier ou les fichiers demandés dans VS Code.
# - Retourne `0` si l'ouverture a été demandée correctement.
#
# Hypothèses & risques:
# - La CLI `code` cible bien l'instance VS Code attendue.
# - Si aucun client VS Code n'est attaché, l'ouverture peut dépendre du contexte distant/local.
#
# Conventions:
# - Style: Bash strict (`set -Eeuo pipefail`).
# - Logs/Erreurs: messages courts, explicites, sans secret.
# - Idempotence: oui, relançable sans effet destructif.
#
# Commandes (copier-coller):
# - Aide: `bash doc/open-in-vscode.sh --help`
# - Mode safe: `bash doc/open-in-vscode.sh docs`
# - Mode réel: `bash doc/open-in-vscode.sh key`
# - Overrides: `VSCODE_BIN=code bash doc/open-in-vscode.sh path analyses/proposition-synthese-client.md`
#
# Sections:
# - 🔧 Configuration
# - 🧪 Validation
# - 🚀 Routage des commandes
# =============================================================================

set -Eeuo pipefail

# =============================================================================
# 🔧 CONFIGURATION
# =============================================================================
SCRIPT_DIR="$(cd -- "$(dirname -- "${BASH_SOURCE[0]}")" && pwd)"
BASE_DIR="$(cd -- "${SCRIPT_DIR}/.." && pwd)"
DOC_DIR="${BASE_DIR}/doc"
VSCODE_BIN="${VSCODE_BIN:-code}"

# =============================================================================
# 🧪 VALIDATION
# =============================================================================
usage() {
  cat <<'USAGE'
Usage:
  bash doc/open-in-vscode.sh [folder|docs|key]
  bash doc/open-in-vscode.sh path <chemin-relatif-ou-absolu>

Actions:
  folder   Ouvre le dossier Indigo
  docs     Ouvre README.md, DOCS.md et OPEN-IN-VSCODE.md
  key      Ouvre le dossier Indigo + les fichiers les plus utiles
  path     Ouvre un chemin précis
USAGE
}

die() {
  printf 'ERROR: %s\n' "$*" >&2
  exit 1
}

require_cmd() {
  command -v "$1" >/dev/null 2>&1 || die "commande introuvable: $1"
}

normalize_target() {
  local raw="$1"
  if [[ "$raw" = /* ]]; then
    printf '%s\n' "$raw"
  else
    printf '%s/%s\n' "$BASE_DIR" "$raw"
  fi
}

open_with_code() {
  "$VSCODE_BIN" -r "$@"
}

# =============================================================================
# 🚀 ROUTAGE DES COMMANDES
# =============================================================================
require_cmd "$VSCODE_BIN"

mode="${1:-folder}"
case "$mode" in
  -h|--help|help)
    usage
    ;;
  folder)
    open_with_code "$BASE_DIR"
    ;;
  docs)
    open_with_code \
      "$DOC_DIR/README.md" \
      "$DOC_DIR/DOCS.md" \
      "$DOC_DIR/OPEN-IN-VSCODE.md"
    ;;
  key)
    open_with_code \
      "$BASE_DIR" \
      "$DOC_DIR/DOCS.md" \
      "$BASE_DIR/analyses/proposition-synthese-client.md" \
      "$BASE_DIR/livrables/proposition-indigo-solution-ia-diagober-serma.pdf"
    ;;
  path)
    shift || true
    [[ $# -ge 1 ]] || die "usage: bash doc/open-in-vscode.sh path <chemin>"
    target="$(normalize_target "$1")"
    [[ -e "$target" ]] || die "chemin introuvable: $target"
    open_with_code "$target"
    ;;
  *)
    die "mode inconnu: $mode (utiliser --help)"
    ;;
esac
