#!/bin/bash

# Script para verificar conexión con Airtable y listar módulos disponibles
# Uso: ./test-airtable-connection.sh

# =============================================================================
# CONFIGURACIÓN DE AIRTABLE - MODIFICA AQUÍ TUS DATOS
# =============================================================================
AIRTABLE_API_KEY="patiXf0DmXaHBmoAm.ff9fca93e854cad97ad54f99b962d2cb061bcb2571525f05ad18c008a2b3b127"
AIRTABLE_BASE_ID="appVTbi2oO1FIvvkJ"
AIRTABLE_MODULES_TABLE="MODULOS"
AIRTABLE_PROJECTS_TABLE="PROYECTOS"
AIRTABLE_PROPAGATIONS_TABLE="PROPAGACIONES"

# Colores para output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
BLUE='\033[0;34m'
PURPLE='\033[0;35m'
CYAN='\033[0;36m'
NC='\033[0m'

# Función para logging
log_info() {
    echo -e "${BLUE}ℹ️  $1${NC}"
}

log_success() {
    echo -e "${GREEN}✅ $1${NC}"
}

log_warning() {
    echo -e "${YELLOW}⚠️  $1${NC}"
}

log_error() {
    echo -e "${RED}❌ $1${NC}"
}

log_step() {
    echo -e "${PURPLE}🔧 $1${NC}"
}

# Función para hacer requests a Airtable
airtable_request() {
    local method=$1
    local endpoint=$2
    local data=$3
    
    local url="https://api.airtable.com/v0/${AIRTABLE_BASE_ID}/${endpoint}"
    local headers=(
        "Authorization: Bearer ${AIRTABLE_API_KEY}"
        "Content-Type: application/json"
    )
    
    if [ "$method" = "GET" ]; then
        curl -s -H "${headers[0]}" -H "${headers[1]}" "$url"
    elif [ "$method" = "POST" ]; then
        curl -s -X POST -H "${headers[0]}" -H "${headers[1]}" -d "$data" "$url"
    elif [ "$method" = "PATCH" ]; then
        curl -s -X PATCH -H "${headers[0]}" -H "${headers[1]}" -d "$data" "$url"
    fi
}

# Función para obtener el nombre de Airtable de un módulo
get_airtable_module_name() {
    local module_name=$1
    case $module_name in
        "gallery") echo "GALLERY IMAGE" ;;
        "blog") echo "BLOG" ;;
        "services") echo "SERVICES" ;;
        "products") echo "PRODUCTS" ;;
        "projects") echo "PROJECTS" ;;
        "team") echo "TEAM PROFILES" ;;
        "references") echo "REFERENCES" ;;
        "cd-base") echo "CD-BASE" ;;
        *) echo "" ;;
    esac
}

# Función para verificar conexión con Airtable
test_airtable_connection() {
    log_step "Verificando conexión con Airtable..."
    
    local response=$(airtable_request "GET" "${AIRTABLE_MODULES_TABLE}")
    
    if echo "$response" | jq -e '.records' > /dev/null 2>&1; then
        log_success "Conexión exitosa con Airtable"
        return 0
    else
        log_error "Error de conexión con Airtable"
        echo "Respuesta: $response"
        return 1
    fi
}

# Función para listar módulos en Airtable
list_airtable_modules() {
    log_step "Listando módulos en Airtable..."
    
    local response=$(airtable_request "GET" "${AIRTABLE_MODULES_TABLE}")
    local modules=$(echo "$response" | jq -r '.records[] | "\(.id) | \(.fields.Name // "Sin nombre") | \(.fields["Versión actual"] // "Sin versión")"')
    
    if [ -z "$modules" ]; then
        log_warning "No se encontraron módulos en Airtable"
        return
    fi
    
    echo ""
    echo "📋 Módulos registrados en Airtable:"
    echo "=================================="
    echo "$modules" | while IFS='|' read -r id name version; do
        echo "  📦 $name"
        echo "     ID: $id"
        echo "     Versión: $version"
        echo ""
    done
}

# Función para verificar módulos del script vs Airtable
check_module_mapping() {
    log_step "Verificando mapeo de módulos..."
    
    local script_modules=("gallery" "blog" "services" "products" "projects" "team" "references" "cd-base")
    local missing_modules=()
    
    echo ""
    echo "🔍 Verificando módulos del script vs Airtable:"
    echo "=============================================="
    
    for module in "${script_modules[@]}"; do
        local airtable_name=$(get_airtable_module_name "$module")
        if [ -n "$airtable_name" ]; then
            local response=$(airtable_request "GET" "${AIRTABLE_MODULES_TABLE}")
            local module_exists=$(echo "$response" | jq -r --arg name "$airtable_name" '.records[] | select(.fields.Name == $name) | .id // empty')
            
            if [ -n "$module_exists" ]; then
                log_success "$module → $airtable_name ✅"
            else
                log_warning "$module → $airtable_name ❌ (no encontrado en Airtable)"
                missing_modules+=("$module")
            fi
        else
            log_warning "$module → No mapeado ❌"
            missing_modules+=("$module")
        fi
    done
    
    if [ ${#missing_modules[@]} -gt 0 ]; then
        echo ""
        log_warning "Módulos que necesitan configuración:"
        for module in "${missing_modules[@]}"; do
            echo "  - $module"
        done
    else
        echo ""
        log_success "Todos los módulos están correctamente mapeados y registrados"
    fi
}

# Función para verificar proyectos
check_projects() {
    log_step "Verificando proyectos en Airtable..."
    
    local response=$(airtable_request "GET" "${AIRTABLE_PROJECTS_TABLE}")
    local project_count=$(echo "$response" | jq '.records | length')
    
    if [ "$project_count" -gt 0 ]; then
        log_success "Se encontraron $project_count proyectos en Airtable"
        
        echo ""
        echo "📁 Proyectos registrados:"
        echo "========================"
        echo "$response" | jq -r '.records[] | "  📂 \(.fields["PROJECT Name"] // "Sin nombre") | Rama: \(.fields["Rama principal"] // "Sin rama")"'
    else
        log_warning "No se encontraron proyectos en Airtable"
    fi
}

# Función para verificar propagaciones
check_propagations() {
    log_step "Verificando propagaciones en Airtable..."
    
    local response=$(airtable_request "GET" "${AIRTABLE_PROPAGATIONS_TABLE}")
    local propagation_count=$(echo "$response" | jq '.records | length')
    
    if [ "$propagation_count" -gt 0 ]; then
        log_success "Se encontraron $propagation_count propagaciones en Airtable"
        
        # Contar por estado
        local pending_count=$(echo "$response" | jq -r '.records[] | select(.fields.Estado == "Pendiente") | .id' | wc -l)
        local completed_count=$(echo "$response" | jq -r '.records[] | select(.fields.Estado == "completado") | .id' | wc -l)
        
        echo ""
        echo "📊 Estado de propagaciones:"
        echo "  ⏳ Pendientes: $pending_count"
        echo "  ✅ Completadas: $completed_count"
    else
        log_warning "No se encontraron propagaciones en Airtable"
    fi
}

# Función principal
main() {
    echo "🧪 Test de conexión y configuración de Airtable"
    echo "=============================================="
    echo ""
    
    # Verificar que jq esté instalado
    if ! command -v jq &> /dev/null; then
        log_error "jq no está instalado. Instálalo con: brew install jq"
        exit 1
    fi
    
    # Verificar configuración
    if [ -z "$AIRTABLE_API_KEY" ] || [ -z "$AIRTABLE_BASE_ID" ]; then
        log_error "Configuración incompleta. Verifica AIRTABLE_API_KEY y AIRTABLE_BASE_ID"
        exit 1
    fi
    
    # Test de conexión
    if ! test_airtable_connection; then
        exit 1
    fi
    
    # Listar módulos
    list_airtable_modules
    
    # Verificar mapeo
    check_module_mapping
    
    # Verificar proyectos
    check_projects
    
    # Verificar propagaciones
    check_propagations
    
    echo ""
    echo "🎉 Test completado"
    echo ""
    echo "💡 Próximos pasos:"
    echo "  1. Si hay módulos faltantes, agrégalos a Airtable"
    echo "  2. Si hay proyectos faltantes, agrégalos a Airtable"
    echo "  3. Prueba el tracking: ./track-module.sh gallery \"Test de tracking\""
    echo "  4. Propaga los scripts a otros proyectos cuando esté todo listo"
}

# Ejecutar función principal
main "$@" 