#!/bin/bash

# Script para actualizar el estado de propagaciones en Airtable
# Uso: ./update-propagation-status.sh <propagation_id> <new_status> [duration] [notes]

PROPAGATION_ID=$1
NEW_STATUS=$2
DURATION=$3
NOTES=$4

# =============================================================================
# CONFIGURACIÓN DE AIRTABLE - MODIFICA AQUÍ TUS DATOS
# =============================================================================
AIRTABLE_API_KEY="patiXf0DmXaHBmoAm.ff9fca93e854cad97ad54f99b962d2cb061bcb2571525f05ad18c008a2b3b127"
AIRTABLE_BASE_ID="appVTbi2oO1FIvvkJ"
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'
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}"
}

# Verificar configuración
check_config() {
    if [ -z "$AIRTABLE_API_KEY" ]; then
        log_error "AIRTABLE_API_KEY no está configurado"
        echo "Edita el archivo scripts/update-propagation-status.sh y configura tu API Key"
        exit 1
    fi
    
    if [ -z "$AIRTABLE_BASE_ID" ]; then
        log_error "AIRTABLE_BASE_ID no está configurado"
        echo "Edita el archivo scripts/update-propagation-status.sh y configura tu Base ID"
        exit 1
    fi
}

# 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" = "PATCH" ]; then
        curl -s -X PATCH -H "${headers[0]}" -H "${headers[1]}" -d "$data" "$url"
    fi
}

# Función para actualizar el estado de una propagación
update_propagation_status() {
    local propagation_id=$1
    local new_status=$2
    local duration=$3
    local notes=$4
    
    # Construir el JSON de actualización
    local fields="{\"Estado\": \"$new_status\""
    
    if [ -n "$duration" ]; then
        fields="$fields, \"Duración de propagación\": $duration"
    fi
    
    if [ -n "$notes" ]; then
        fields="$fields, \"Notas\": \"$notes\""
    fi
    
    # Agregar fecha de actualización si el estado es "completado"
    if [ "$new_status" = "completado" ]; then
        fields="$fields, \"Fecha de propagación\": \"$(date +%Y-%m-%d)\""
    fi
    
    fields="$fields}"
    
    local data="{\"fields\": $fields}"
    
    airtable_request "PATCH" "${AIRTABLE_PROPAGATIONS_TABLE}/${propagation_id}" "$data"
}

# Función para listar propagaciones pendientes
list_pending_propagations() {
    log_step "Obteniendo propagaciones pendientes..."
    
    local response=$(airtable_request "GET" "${AIRTABLE_PROPAGATIONS_TABLE}?filterByFormula={Estado}='pendiente'")
    
    if [ -z "$response" ]; then
        log_warning "No se encontraron propagaciones pendientes"
        return
    fi
    
    echo "$response" | jq -r '.records[] | "ID: \(.id) | Módulo: \(.fields.Módulo[0] // "N/A") | Proyecto: \(.fields.Proyecto[0] // "N/A") | Versión: \(.fields["Versión propagada"] // "N/A")"'
}

# Función principal
main() {
    if [ -z "$PROPAGATION_ID" ]; then
        echo "Uso: $0 <propagation_id> <new_status> [duration] [notes]"
        echo ""
        echo "Estados disponibles:"
        echo "  - pendiente"
        echo "  - completado"
        echo "  - error"
        echo "  - cancelado"
        echo ""
        echo "Ejemplos:"
        echo "  $0 recXXXXXXXXXXXXXX completado 45"
        echo "  $0 recXXXXXXXXXXXXXX error 0 \"Error en la propagación\""
        echo ""
        echo "Para listar propagaciones pendientes:"
        echo "  $0 --list"
        exit 1
    fi
    
    # Si se solicita listar propagaciones pendientes
    if [ "$PROPAGATION_ID" = "--list" ]; then
        check_config
        list_pending_propagations
        exit 0
    fi
    
    if [ -z "$NEW_STATUS" ]; then
        log_error "Debes especificar el nuevo estado"
        exit 1
    fi
    
    # Verificar configuración
    check_config
    
    log_step "Actualizando estado de propagación $PROPAGATION_ID a '$NEW_STATUS'"
    
    # Actualizar propagación en Airtable
    local update_response=$(update_propagation_status "$PROPAGATION_ID" "$NEW_STATUS" "$DURATION" "$NOTES")
    
    if echo "$update_response" | jq -e '.id' > /dev/null 2>&1; then
        log_success "Estado de propagación actualizado exitosamente"
        echo ""
        echo "📊 Detalles de la actualización:"
        echo "  ID: $PROPAGATION_ID"
        echo "  Nuevo estado: $NEW_STATUS"
        if [ -n "$DURATION" ]; then
            echo "  Duración: $DURATION segundos"
        fi
        if [ -n "$NOTES" ]; then
            echo "  Notas: $NOTES"
        fi
    else
        log_error "Error al actualizar el estado de la propagación"
        echo "Respuesta: $update_response"
        exit 1
    fi
}

# Ejecutar función principal
main "$@" 