#!/bin/bash

# --- CONFIGURACIÓN ---
APP_PORT=1910
APP_DIR="/home/infiny/servicio.infiny-capital.com"
JAR_NAME="infinityapi-0.0.1-SNAPSHOT.jar"
LOG_FILE="app.log"

echo ">>> Iniciando proceso de reinicio en $APP_DIR..."

# 1. Identificar y matar el proceso anterior que usa el puerto 1910
echo ">>> Buscando proceso en el puerto $APP_PORT..."
PID=$(lsof -t -i:$APP_PORT)

if [ -z "$PID" ]; then
    echo ">>> No se encontró ningún proceso corriendo en el puerto $APP_PORT."
else
    echo ">>> Matando proceso antiguo (PID: $PID)..."
    kill -9 $PID
    sleep 2
fi

# 2. Asegurar que estamos en el directorio correcto
cd $APP_DIR || { echo ">>> Error: No se pudo acceder a $APP_DIR"; exit 1; }

# 3. Arrancar la aplicación en segundo plano
echo ">>> Arrancando la nueva versión: $JAR_NAME..."
nohup java -jar $JAR_NAME > $LOG_FILE 2>&1 &

# 4. Verificar si arrancó (espera con reintentos)
echo ">>> Esperando a que la aplicación levante el puerto $APP_PORT..."
MAX_RETRIES=10
COUNT=0
SUCCESS=false

while [ $COUNT -lt $MAX_RETRIES ]; do
    sleep 3
    # Intentamos detectar el puerto usando ss o lsof
    NEW_PID=$(ss -tulpn | grep ":$APP_PORT " | awk -F',' '{print $2}' | grep -o '[0-9]\+' | head -n 1)
    if [ -z "$NEW_PID" ]; then
        NEW_PID=$(lsof -t -i:$APP_PORT)
    fi

    if [ ! -z "$NEW_PID" ]; then
        echo ">>> ÉXITO: Aplicación arrancada correctamente con PID: $NEW_PID"
        SUCCESS=true
        break
    fi
    COUNT=$((COUNT+1))
    echo ">>> Intento $COUNT/$MAX_RETRIES: El puerto $APP_PORT aún no responde..."
done

if [ "$SUCCESS" = false ]; then
    echo ">>> ADVERTENCIA: No se detectó el puerto $APP_PORT tras 30 segundos. Revisa $LOG_FILE"
fi
