#!/bin/bash

# Script para instalar y configurar MCP OCI Server para Claude Desktop

echo "===== MCP OCI SERVER INSTALLER FOR CLAUDE DESKTOP ====="
echo "Este script automatiza la instalación y configuración para Claude Desktop."

# Detectar sistema operativo
OS="unknown"
CONFIG_DIR=""

if [[ "$OSTYPE" == "darwin"* ]]; then
    OS="macos"
    CONFIG_DIR="$HOME/Library/Application Support/Claude"
elif [[ "$OSTYPE" == "linux-gnu"* ]]; then
    OS="linux"
    CONFIG_DIR="$HOME/.config/Claude"
elif [[ "$OSTYPE" == "msys" || "$OSTYPE" == "cygwin" || "$OSTYPE" == "win32" ]]; then
    OS="windows"
    CONFIG_DIR="$APPDATA\\Claude"
fi

echo "Sistema detectado: $OS"
echo "Directorio de configuración: $CONFIG_DIR"

# Comprobar si npx está en el PATH
NPX_PATH=$(which npx)
if [ -z "$NPX_PATH" ]; then
    echo "Error: No se ha encontrado npx en el PATH. Asegúrate de tener Node.js instalado."
    exit 1
fi

echo "NPX encontrado en: $NPX_PATH"

# Instalar el paquete globalmente
echo ""
echo "Paso 1: Instalando MCP OCI Server globalmente..."
npm install -g @jocebal/mcp-server-oci

if [ $? -ne 0 ]; then
    echo "Error: Falló la instalación global."
    exit 1
fi

# Crear directorio de configuración si no existe
echo ""
echo "Paso 2: Creando directorio de configuración..."
mkdir -p "$CONFIG_DIR"

if [ $? -ne 0 ]; then
    echo "Error: No se pudo crear el directorio de configuración."
    exit 1
fi

# Archivo de configuración
CONFIG_FILE="$CONFIG_DIR/claude_desktop_config.json"

# Comprobar si el archivo de configuración ya existe
if [ -f "$CONFIG_FILE" ]; then
    echo "El archivo de configuración ya existe."
    echo "Vamos a añadir la herramienta oracle-cloud a la configuración existente."
    
    # Hacer una copia de seguridad
    cp "$CONFIG_FILE" "$CONFIG_FILE.bak"
    echo "Copia de seguridad creada en $CONFIG_FILE.bak"
    
    # Leer el perfil de OCI CLI
    echo ""
    read -p "Introduce el perfil de OCI a utilizar (DEFAULT): " OCI_PROFILE
    OCI_PROFILE=${OCI_PROFILE:-DEFAULT}
    
    # Actualizar la configuración existente con jq si está disponible
    if command -v jq >/dev/null 2>&1; then
        echo "Actualizando configuración con jq..."
        
        # Comprobar si ya existe la sección tools
        if jq -e '.tools' "$CONFIG_FILE" >/dev/null 2>&1; then
            # Añadir la herramienta oracle-cloud a la sección tools existente
            jq --arg npx "$NPX_PATH" --arg profile "$OCI_PROFILE" '.tools."oracle-cloud" = {"command": $npx, "args": ["-y", "@jocebal/mcp-server-oci", "--profile", $profile], "env": {}}' "$CONFIG_FILE" > "$CONFIG_FILE.tmp"
            mv "$CONFIG_FILE.tmp" "$CONFIG_FILE"
        else
            # Crear la sección tools y añadir la herramienta oracle-cloud
            jq --arg npx "$NPX_PATH" --arg profile "$OCI_PROFILE" '. + {"tools": {"oracle-cloud": {"command": $npx, "args": ["-y", "@jocebal/mcp-server-oci", "--profile", $profile], "env": {}}}}' "$CONFIG_FILE" > "$CONFIG_FILE.tmp"
            mv "$CONFIG_FILE.tmp" "$CONFIG_FILE"
        fi
    else
        echo "jq no está disponible. Creando configuración manual..."
        # Crear configuración manualmente
        cat > "$CONFIG_FILE" << EOF
{
  "tools": {
    "oracle-cloud": {
      "command": "$NPX_PATH",
      "args": [
        "-y",
        "@jocebal/mcp-server-oci",
        "--profile",
        "$OCI_PROFILE"
      ],
      "env": {}
    }
  }
}
EOF
    fi
else
    # Leer el perfil de OCI CLI
    echo ""
    read -p "Introduce el perfil de OCI a utilizar (DEFAULT): " OCI_PROFILE
    OCI_PROFILE=${OCI_PROFILE:-DEFAULT}
    
    # Crear archivo de configuración desde cero
    echo "Creando archivo de configuración nuevo..."
    cat > "$CONFIG_FILE" << EOF
{
  "tools": {
    "oracle-cloud": {
      "command": "$NPX_PATH",
      "args": [
        "-y",
        "@jocebal/mcp-server-oci",
        "--profile",
        "$OCI_PROFILE"
      ],
      "env": {}
    }
  }
}
EOF
fi

echo ""
echo "✅ Configuración completada exitosamente!"
echo "Archivo de configuración: $CONFIG_FILE"

echo ""
echo "===== PROCESO COMPLETADO ====="
echo "Ahora puedes abrir Claude Desktop y utilizar la herramienta oracle-cloud."
echo "Ejemplo de uso: 'Muestra todas las instancias en Oracle Cloud'"
echo ""
