#!/bin/bash

# Script d'installation du serveur MCP md2pdf pour Linux
# Ce script installe simple-commands-mcp et configure l'intégration avec Cursor

set -e  # Arrêter en cas d'erreur

# Couleurs pour l'affichage
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
NC='\033[0m' # No Color

echo -e "${BLUE}========================================${NC}"
echo -e "${BLUE}Installation du serveur MCP md2pdf${NC}"
echo -e "${BLUE}========================================${NC}"
echo ""

# Vérifier Node.js
echo -e "${YELLOW}[1/6]${NC} Vérification de Node.js..."
if ! command -v node &> /dev/null; then
    echo -e "${RED}❌ Node.js n'est pas installé.${NC}"
    echo -e "Installez Node.js depuis https://nodejs.org/"
    exit 1
fi

NODE_VERSION=$(node --version | cut -d'v' -f2 | cut -d'.' -f1)
if [ "$NODE_VERSION" -lt 18 ]; then
    echo -e "${RED}❌ Node.js version 18+ requise. Version actuelle: $(node --version)${NC}"
    exit 1
fi

echo -e "${GREEN}✅ Node.js $(node --version) détecté${NC}"

# Vérifier npm
echo -e "${YELLOW}[2/6]${NC} Vérification de npm..."
if ! command -v npm &> /dev/null; then
    echo -e "${RED}❌ npm n'est pas installé.${NC}"
    exit 1
fi

echo -e "${GREEN}✅ npm $(npm --version) détecté${NC}"

# Vérifier curl
echo -e "${YELLOW}[3/6]${NC} Vérification de curl..."
if ! command -v curl &> /dev/null; then
    echo -e "${YELLOW}⚠️  curl n'est pas installé. Installation recommandée.${NC}"
    echo -e "   Installez curl avec: sudo apt-get install curl (Debian/Ubuntu)"
    echo -e "   ou: sudo pacman -S curl (Arch Linux)"
else
    echo -e "${GREEN}✅ curl détecté${NC}"
fi

# Obtenir le répertoire de travail
SCRIPT_DIR="$( cd "$( dirname "${BASH_SOURCE[0]}" )" && pwd )"

# PROJECT_ROOT est le répertoire d'exécution (répertoire courant depuis lequel le script est lancé)
# Si PROJECT_ROOT n'est pas spécifié via une variable d'environnement, utiliser PWD
if [ -z "${PROJECT_ROOT:-}" ]; then
    PROJECT_ROOT="$(pwd)"
else
    PROJECT_ROOT="$(cd "$PROJECT_ROOT" && pwd)"
fi

echo ""
echo -e "${BLUE}Informations du projet:${NC}"
echo -e "  Répertoire du script: $SCRIPT_DIR"
echo -e "  Répertoire d'exécution: $PROJECT_ROOT"
echo ""

# Vérifier que le répertoire du projet existe et est accessible
if [ ! -d "$PROJECT_ROOT" ]; then
    echo -e "${RED}❌ Le répertoire du projet n'existe pas: $PROJECT_ROOT${NC}"
    exit 1
fi

if [ ! -w "$PROJECT_ROOT" ]; then
    echo -e "${RED}❌ Pas d'autorisation d'écriture dans: $PROJECT_ROOT${NC}"
    exit 1
fi

# Demander l'URL de l'API
echo -e "${YELLOW}[4/6]${NC} Configuration de l'API..."
read -p "URL de l'API md2pdf (par défaut: http://localhost:8000): " API_URL
API_URL=${API_URL:-http://localhost:8000}

echo -e "${GREEN}✅ API URL configurée: $API_URL${NC}"

# Initialiser USE_NPX
USE_NPX=false

# Installer simple-commands-mcp
echo -e "${YELLOW}[5/6]${NC} Installation de simple-commands-mcp..."
echo "  Tentative d'installation globale avec npm..."

# Tester si l'installation globale fonctionne (sans sudo)
if npm install -g simple-commands-mcp 2>&1 | grep -q "EACCES\|permission denied"; then
    echo -e "${YELLOW}⚠️  Installation globale nécessite des permissions élevées.${NC}"
    echo -e "${YELLOW}   Utilisation de npx (pas d'installation requise)...${NC}"
    USE_NPX=true
    # Vérifier que npx fonctionne
    if npx simple-commands-mcp --version &>/dev/null; then
        echo -e "${GREEN}✅ simple-commands-mcp disponible via npx${NC}"
    else
        echo -e "${BLUE}   npx téléchargera simple-commands-mcp automatiquement au premier usage${NC}"
    fi
elif npm install -g simple-commands-mcp 2>/dev/null; then
    echo -e "${GREEN}✅ simple-commands-mcp installé globalement${NC}"
    USE_NPX=false
else
    echo -e "${YELLOW}⚠️  Erreur lors de l'installation globale.${NC}"
    echo -e "${YELLOW}   Utilisation de npx (pas d'installation requise)...${NC}"
    USE_NPX=true
fi

# Créer le fichier de configuration mcp-config.json
echo -e "${YELLOW}[6/6]${NC} Création de la configuration..."

MCP_CONFIG_FILE="$PROJECT_ROOT/mcp-config.json"

# Vérifier qu'on peut écrire dans le fichier
if ! touch "$MCP_CONFIG_FILE" 2>/dev/null; then
    echo -e "${RED}❌ Impossible d'écrire dans: $MCP_CONFIG_FILE${NC}"
    echo -e "${YELLOW}   Vérifiez les permissions du répertoire${NC}"
    exit 1
fi

# Créer le fichier JSON avec la bonne syntaxe pour simple-commands-mcp
# Structure attendue: "tools" (pas "commands") avec "command" en une seule chaîne et "daemon"
cat > "$MCP_CONFIG_FILE" << EOF
{
  "tools": [
    {
      "name": "convertir_pdf",
      "description": "Convertit du Markdown en PDF via l'API md2pdf",
      "command": "curl -X POST $API_URL/convert -H 'Content-Type: application/json' -d '{\\\"markdown\\\": \\\"{{markdown}}\\\", \\\"template\\\": \\\"{{template}}\\\", \\\"style\\\": \\\"{{style}}\\\", \\\"sommaire\\\": {{sommaire}}, \\\"glossaire\\\": {{glossaire}}, \\\"cover\\\": {{cover}}}' -s -S",
      "daemon": false
    },
    {
      "name": "lister_templates",
      "description": "Liste les templates disponibles dans md2pdf",
      "command": "curl $API_URL/api/templates -s -S",
      "daemon": false
    },
    {
      "name": "lister_styles",
      "description": "Liste les styles CSS disponibles dans md2pdf",
      "command": "curl $API_URL/api/styles -s -S",
      "daemon": false
    },
    {
      "name": "convertir_pdf_simple",
      "description": "Conversion simple avec valeurs par défaut (template=base, style=default)",
      "command": "curl -X POST $API_URL/convert -H 'Content-Type: application/json' -d '{\\\"markdown\\\": \\\"{{markdown}}\\\", \\\"template\\\": \\\"base\\\", \\\"style\\\": \\\"default\\\"}' -s -S",
      "daemon": false
    }
  ]
}
EOF

if [ $? -eq 0 ] && [ -f "$MCP_CONFIG_FILE" ]; then
    echo -e "${GREEN}✅ Configuration créée: $MCP_CONFIG_FILE${NC}"
else
    echo -e "${RED}❌ Erreur lors de la création du fichier de configuration${NC}"
    exit 1
fi

# Créer le répertoire .cursor s'il n'existe pas
CURSOR_DIR="$PROJECT_ROOT/.cursor"
if ! mkdir -p "$CURSOR_DIR" 2>/dev/null; then
    echo -e "${RED}❌ Impossible de créer le répertoire: $CURSOR_DIR${NC}"
    exit 1
fi

# Créer ou mettre à jour .cursor/mcp.json
CURSOR_MCP_FILE="$CURSOR_DIR/mcp.json"

if [ -f "$CURSOR_MCP_FILE" ]; then
    echo -e "${YELLOW}⚠️  Le fichier .cursor/mcp.json existe déjà.${NC}"
    read -p "Souhaitez-vous le remplacer? (o/N): " REPLACE
    if [[ ! "$REPLACE" =~ ^[Oo]$ ]]; then
        echo -e "${YELLOW}Le fichier existant sera conservé.${NC}"
        SKIP_CURSOR_CONFIG=true
    fi
fi

if [ -z "$SKIP_CURSOR_CONFIG" ]; then
    # Convertir le chemin pour JSON (simple-commands-mcp utilise @ au lieu de --config)
    CONFIG_PATH_ABSOLUTE="$MCP_CONFIG_FILE"
    
    # simple-commands-mcp utilise @chemin/fichier.json au lieu de --config chemin/fichier.json
    if [ "$USE_NPX" = true ]; then
        cat > "$CURSOR_MCP_FILE" <<EOF
{
  "mcpServers": {
    "md2pdf-simple": {
      "command": "npx",
      "args": [
        "simple-commands-mcp",
        "@$CONFIG_PATH_ABSOLUTE"
      ],
      "env": {
        "NODE_ENV": "production"
      }
    }
  }
}
EOF
    else
        cat > "$CURSOR_MCP_FILE" <<EOF
{
  "mcpServers": {
    "md2pdf-simple": {
      "command": "simple-commands-mcp",
      "args": [
        "@$CONFIG_PATH_ABSOLUTE"
      ],
      "env": {
        "NODE_ENV": "production"
      }
    }
  }
}
EOF
    fi

    if [ $? -eq 0 ] && [ -f "$CURSOR_MCP_FILE" ]; then
        echo -e "${GREEN}✅ Configuration Cursor créée: $CURSOR_MCP_FILE${NC}"
    else
        echo -e "${RED}❌ Erreur lors de la création de la configuration Cursor${NC}"
        exit 1
    fi
fi

echo ""
echo -e "${GREEN}========================================${NC}"
echo -e "${GREEN}Installation terminée avec succès !${NC}"
echo -e "${GREEN}========================================${NC}"
echo ""
echo -e "${BLUE}Prochaines étapes:${NC}"
echo -e "  1. Redémarrez Cursor pour que les changements prennent effet"
echo -e "  2. Vérifiez que votre API md2pdf est démarrée sur $API_URL"
echo -e "  3. Dans Cursor, ouvrez la palette de commandes (Ctrl+Shift+P)"
echo -e "     et recherchez 'MCP' pour voir les outils disponibles"
echo ""
echo -e "${BLUE}Fichiers créés:${NC}"
echo -e "  - $MCP_CONFIG_FILE"
echo -e "  - $CURSOR_MCP_FILE"
echo ""
echo -e "${YELLOW}Pour tester manuellement:${NC}"
if [ "$USE_NPX" = true ]; then
    echo -e "  ${CYAN}npx simple-commands-mcp @$MCP_CONFIG_FILE${NC}"
else
    echo -e "  ${CYAN}simple-commands-mcp @$MCP_CONFIG_FILE${NC}"
    echo -e "  ${CYAN}ou: npx simple-commands-mcp @$MCP_CONFIG_FILE${NC}"
fi
echo ""
if [ "$USE_NPX" = true ]; then
    echo -e "${BLUE}Note:${NC} Le script utilise ${YELLOW}npx${NC} (pas d'installation globale requise)."
    echo -e "       simple-commands-mcp sera téléchargé automatiquement au premier usage."
    echo ""
fi
