#!/usr/bin/env bash
# Port a Mac/Linux de "git push.bat" (mismo flujo y mismas preguntas).
# Uso: bash "yo/comandos/git push.sh"   (o ./git\ push.sh desde yo/comandos)

cd "$(dirname "$0")/../.." || exit 1
echo "Directorio actual: $(pwd)"

# Leer usuario SSH desde .env (si hay varias líneas SSH_USER=, gana la última, igual que el .bat)
SSH_USER="forge"
ENV_USER=$(grep -E '^SSH_USER=' .env 2>/dev/null | tail -1 | cut -d= -f2- | tr -d '\r')
[ -n "$ENV_USER" ] && SSH_USER="$ENV_USER"
SSH_HOST="${SSH_USER}@137.184.158.50"

# Si el usuario no es forge, usar sudo -u forge para comandos remotos
SUDO_PREFIX=""
if [ "$SSH_USER" != "forge" ]; then
    SUDO_PREFIX="sudo -H -u forge "
fi

# Restaurar TODOS los assets compilados que pudieron cambiar por npm run watch/dev local.
# No importa perder este estado local: se regeneran solos al compilar. Esto es clave para
# que el "git pull" de abajo no choque en merge contra chunks con hashes de contenido
# distintos a los del remoto (la causa de los conflictos de merge en public/js/chunks).
git checkout -- "public/js/app.js" "public/js/app_public.js" "public/js/app_landing_empresas.js" "public/js/app_watax.js" "public/js/app_fichaje_empleados.js" "public/js/vendor.js" "public/js/manifest.js" "public/css/app.css" 2>/dev/null
git checkout -- "public/js/app.js.LICENSE.txt" "public/js/app_public.js.LICENSE.txt" "public/js/app_landing_empresas.js.LICENSE.txt" "public/js/app_watax.js.LICENSE.txt" "public/js/app_fichaje_empleados.js.LICENSE.txt" "public/js/vendor.js.LICENSE.txt" 2>/dev/null
git checkout -- "public/js/chunks" 2>/dev/null
git clean -fdq "public/js/chunks" 2>/dev/null

# Traer lo del remoto ANTES de tocar nada más. Si esto falla (conflictos reales, no de
# compilación), frenamos acá: mejor resolverlo a mano ahora que después de haber
# contestado todas las preguntas y hecho el commit local.
echo
echo "=== Sincronizando con el repositorio remoto (git pull) ==="
if ! git pull origin master; then
    echo
    echo "ERROR: El pull trajo conflictos que no se resolvieron solos."
    echo "Resolve el merge a mano (git status, arreglar, git add, git commit) y volve a correr este script."
    read -r -p "Presioná Enter para salir..."
    exit 1
fi
echo
echo "Repositorio actualizado, sin conflictos pendientes."

echo
echo "=== Estado actual del repositorio ==="
git status --short | grep -v "public/js/chunks"

echo
read -r -p "Continuar con el proceso de commit/push? (S/N): " CONTINUAR
if [[ ! "$CONTINUAR" =~ ^[sS]$ ]]; then
    echo
    echo "Saliendo..."
    exit 0
fi

echo
echo "======================================"
echo "          PREGUNTAS"
echo "======================================"
echo

read -r -p "1. Ingresa el mensaje del commit: " COMMENT
echo
read -r -p "2. Queres hacer commit y push de estos archivos? (S/N): " CONFIRM
echo

# 3. Detectar automaticamente si hay que compilar assets (js, vue, sass, webpack, package.json)
COMPILE=N
[ -n "$(git diff --name-only HEAD -- 'resources/js/' 'resources/sass/' 'webpack.mix.js' 'package.json' 2>/dev/null)" ] && COMPILE=S
[ -n "$(git diff --name-only HEAD -- 'resources/views/*.vue' 'resources/views/**/*.vue' 2>/dev/null)" ] && COMPILE=S
[ -n "$(git ls-files --others --exclude-standard -- 'resources/js/' 'resources/sass/' 2>/dev/null)" ] && COMPILE=S

# El servicio Node WhatsApp (wwebjs) quedó FUERA DE USO: se migró a WAHA (contenedor
# Docker en el worker, docker/waha). No se detectan cambios ni se pide reiniciarlo.

read -r -p "3. Queres hacer el deploy en el servidor de PRODUCCION? (S/N): " DEPLOY

echo
echo "======================================"
echo "        RESUMEN DE ACCIONES"
echo "======================================"
echo
echo "   - Mensaje commit: $COMMENT"
if [[ "$CONFIRM" =~ ^[sS]$ ]]; then echo "   - Commit y push: SI"; else echo "   - Commit y push: NO"; fi
if [ "$COMPILE" = "S" ]; then echo "   - Compilar assets: SI (cambios detectados en resources/js, sass, webpack o package.json)"; else echo "   - Compilar assets: NO (sin cambios en archivos fuente)"; fi
if [[ "$DEPLOY" =~ ^[sS]$ ]]; then echo "   - Deploy produccion: SI (git pull en taxes, worker, watax.app, comexnow, misnumeros y MySQL) via $SSH_HOST"; else echo "   - Deploy produccion: NO"; fi
echo

read -r -p "¿Confirmar y ejecutar? (S/N): " EJECUTAR
if [[ ! "$EJECUTAR" =~ ^[sS]$ ]]; then
    echo
    echo "Operación cancelada."
    exit 0
fi

# === Validaciones ===
if [[ "$CONFIRM" =~ ^[sS]$ ]] && [ -z "$COMMENT" ]; then
    echo
    echo "ERROR: El mensaje del commit no puede estar vacío."
    exit 1
fi

echo
echo "======================================"
echo "        EJECUTANDO..."
echo "======================================"

# === 1. COMPILAR ASSETS ===
if [ "$COMPILE" = "S" ]; then
    echo
    echo "=== Limpiando assets compilados por webpack ==="
    rm -rf "public/js/chunks"
    rm -f "public/js/app.js" "public/js/app.js.LICENSE.txt" \
          "public/js/app_public.js" "public/js/app_public.js.LICENSE.txt" \
          "public/js/app_landing_empresas.js" "public/js/app_landing_empresas.js.LICENSE.txt" \
          "public/js/app_watax.js" "public/js/app_watax.js.LICENSE.txt" \
          "public/js/vendor.js" "public/js/vendor.js.LICENSE.txt" \
          "public/js/manifest.js" "public/css/app.css"

    echo
    echo "=== Compilando assets (npm run prod) ==="
    if ! npm run prod; then
        echo
        echo "ERROR: Fallo la compilacion de assets."
        exit 1
    fi

    echo
    echo "Assets compilados correctamente."

    echo
    echo "=== Forzando inclusión de chunks en git ==="
    git add -f public/js/chunks/
fi

# === 2. COMMIT Y PUSH ===
if [[ "$CONFIRM" =~ ^[sS]$ ]]; then
    echo
    echo "=== Agregando archivos ==="
    git add --all

    echo
    echo "=== Archivos a commitear ==="
    git status --short

    echo
    echo "=== Realizando commit ==="
    if ! git commit -m "$COMMENT"; then
        echo
        echo "ERROR: No se pudo hacer commit."
        exit 1
    fi

    echo
    echo "=== Haciendo push a origin master ==="
    if ! git push origin master; then
        echo
        echo "Hay cambios en el repositorio remoto. Haciendo pull..."
        if ! git pull --no-edit origin master; then
            echo
            echo "ERROR: Fallo el pull. Puede haber conflictos para resolver manualmente."
            exit 1
        fi

        echo
        echo "=== Reintentando push ==="
        if ! git push origin master; then
            echo
            echo "ERROR: Fallo el push."
            exit 1
        fi
    fi

    echo
    echo "Commit y push completados."
fi

# === 3. DEPLOY (git pull en servidores) ===
if [[ "$DEPLOY" =~ ^[sS]$ ]]; then
    if [[ "$CONFIRM" =~ ^[sS]$ ]]; then
        echo
        echo "=== Haciendo deploy en servidor de Producción ($SSH_HOST) ==="
        if ! ssh -t "$SSH_HOST" "${SUDO_PREFIX}bash /home/forge/taxes.com.ar/deploy.sh"; then
            echo
            echo "ERROR: Falló el deploy."
            exit 1
        fi

        echo
        echo "Deploy completado."
        # WAHA no se toca en el deploy: es un contenedor aparte, con su propio ciclo.
    else
        echo
        echo "Deploy omitido porque no se hizo commit/push."
    fi
fi

echo
echo "======================================"
echo "     PROCESO FINALIZADO"
echo "======================================"
echo
