#!/bin/bash
#!/usr/bin/php

# Posicionarse en el directorio del propio script. Sin esto, si se invoca con ruta
# absoluta desde otro CWD (ej. `bash /home/forge/taxes.com.ar/migrationsDB.sh` por SSH
# con CWD=/home/forge), el `php artisan2.php` (ruta relativa) falla con
# "Could not open input file: artisan2.php" y NINGUNA migración corre (pero el script
# "termina", reportando falsos errores). cd al dir del script lo hace CWD-independiente.
cd "$(dirname "$0")" || exit 1

# Leer credenciales del .env de Laravel
ENV_FILE="/home/forge/taxes.com.ar/.env"
# Extraer valores y eliminar comillas (simples o dobles) si las tienen
DB_USER=$(grep "^DB_USERNAME=" "$ENV_FILE" | sed 's/^DB_USERNAME=//' | sed 's/^["'\'']//' | sed 's/["'\'']$//')
DB_PASS=$(grep "^DB_PASSWORD=" "$ENV_FILE" | sed 's/^DB_PASSWORD=//' | sed 's/^["'\'']//' | sed 's/["'\'']$//')
DB_HOST=$(grep "^DB_HOST=" "$ENV_FILE" | sed 's/^DB_HOST=//' | sed 's/^["'\'']//' | sed 's/["'\'']$//')

#variables
#DIA_ACTUAL=`date +%a`
#FECHA_ACTUAL=`date +%Y-%m-%d`
#HORA_ACTUAL=`date +%H-%M`

#nombre del archivo
#ARCH_RESP="$FECHA_ACTUAL-$HORA_ACTUAL"

#DIRECTORIO DE RESPALDO
#DIR_RESP="/var/www/respaldos"

SV_ARRAY=('localhost')
U_ARRAY=("$DB_USER")
C_ARRAY=("$DB_PASS")
BD_ARRAY=('dbtaxes')
LOG_FILE="/home/forge/taxes.com.ar/storage/logs/migrations.log"

# Vaciar el archivo de log al inicio de cada ejecución
> "$LOG_FILE"

#VARIABLES DEL SCRIPT
index=0
count="${#SV_ARRAY[*]}"

##CREAR EL DIRECTORIO DE RESPALDO PARA LA FECHA ACTUAL
#if [ ! -d $ARCH_RESP ];
#then echo -n "Creando directorio de respaldo DIR_RESP/$ARCH_RESP "
#     mkdir $DIR_RESP/$ARCH_RESP ] && continue
#     echo "done."
#fi

OLDIFS=$IFS
IFS=$'\n'
basedatos=$(mysql -u "$DB_USER" -h "$DB_HOST" -p"$DB_PASS" -se "select CONCAT('--db=', p.document, ' ', '--schema=', abu_host.host, ',', abu_host.port, ' ', '--desc=', IFNULL(abu_host.descripcion, 'Sin descripcion'))
                                                                          from tdbabuelas abu
                                                                                   join persons p on abu.person_id = p.id
                                                                                   join tdbabuelas_host abu_host on abu.tdbabuelas_host_id = abu_host.id
                                                                                   join tusers t on abu.user_id = t.idUser
                                                                          where abu.deleted_at is null
                                                                          order by t.importe DESC;" -D "dbtaxes")

#while [ $index -lt $count ];
#do
#contraseña de mysql
#export USER=${U_ARRAY[$index]-i}
#export MYSQL_PWD=${C_ARRAY[$index]-i}

#echo 'Servidor: '${SV_ARRAY[$index]-i}'---usuario: '$MYUSER'---clave: '$MYPASSWORD
#echo 'conectando a-->'${SV_ARRAY[$index]-i}'<....'

# Realizar Backup de las DB'S
#echo "las bases de datos madres: ${basedatos}";

current_time=$(date +"%Y-%m-%d %H:%M:%S")

# Contar total de bases de datos (menos 1 por el header)
total=$(echo "$basedatos" | wc -l)
total=$((total - 1))

echo "Total de bases de datos a migrar: $total"

# Array para guardar errores
declare -a errores=()
contador=0
exitosos=0

for linea in $basedatos; do

  ((contador++))

  if [ $contador -eq 1 ]; then
    continue
  fi

  # Extraer parámetros de la línea
  base=$(echo $linea | grep -oP '(?<=--db=)[^ ]+')
  param=$(echo $linea | grep -oP '(?<=--schema=)[^ ]+')
  desc=$(echo $linea | grep -oP '(?<=--desc=).*')

  # Extraer host del schema
  mysql_host=$(echo $param | cut -d',' -f1)

  echo "[$((contador - 1)) de $total] $desc ($mysql_host) | Base: $base"

  php artisan2.php migrate "--db=$base" "--schema=$param" 2>&1 | tee -a "$LOG_FILE"
  exit_code=${PIPESTATUS[0]}

  if [ $exit_code -ne 0 ]; then
    errores+=("$base | $desc ($mysql_host)")
    echo "[$(date +"%Y-%m-%d %H:%M:%S")] Error en migración de $base con esquema $param" | tee -a "$LOG_FILE"
  else
    ((exitosos++))
  fi
done


end_current_time=$(date +"%Y-%m-%d %H:%M:%S")

# Resumen final
echo "" | tee -a "$LOG_FILE"
echo "========================================" | tee -a "$LOG_FILE"
echo "           RESUMEN DE MIGRACIONES        " | tee -a "$LOG_FILE"
echo "========================================" | tee -a "$LOG_FILE"
echo "Inicio: $current_time" | tee -a "$LOG_FILE"
echo "Fin:    $end_current_time" | tee -a "$LOG_FILE"
echo "----------------------------------------" | tee -a "$LOG_FILE"
echo "Total procesadas: $total" | tee -a "$LOG_FILE"
echo "Exitosas:         $exitosos" | tee -a "$LOG_FILE"
echo "Con errores:      ${#errores[@]}" | tee -a "$LOG_FILE"
echo "----------------------------------------" | tee -a "$LOG_FILE"

if [ ${#errores[@]} -gt 0 ]; then
  echo "" | tee -a "$LOG_FILE"
  echo "DETALLE DE ERRORES:" | tee -a "$LOG_FILE"
  echo "----------------------------------------" | tee -a "$LOG_FILE"
  for error in "${errores[@]}"; do
    echo "  - $error" | tee -a "$LOG_FILE"
  done
  echo "----------------------------------------" | tee -a "$LOG_FILE"
fi

echo "========================================" | tee -a "$LOG_FILE"


#unset USER
#unset MYSQL_PWD

##i=$((i+1))
#let "index = $index + 1"

#done
IFS=$OLDIFS
