#!/usr/bin/env bash
# Reinicializa el datadir de MySQL/MariaDB de XAMPP en Linux (corrige mysql.column_stats / socket 2002).
# PIERDE todas las bases de datos que estén solo en XAMPP. Hace backup del directorio completo antes.
#
# Uso (desde cualquier directorio):
#   sudo bash /ruta/al/repo/scripts/reset-xampp-mysql.sh --yes
#
# Sin sudo no puede modificarse /opt/lampp (Cursor/CI no pueden introducir tu contraseña).

set -euo pipefail

XAMPP="${XAMPP:-/opt/lampp}"
DATADIR="$XAMPP/var/mysql"
MYCNF="$XAMPP/etc/my.cnf"

if [[ "${1:-}" != "--yes" ]]; then
  echo "Este script BORRA el contenido de $DATADIR (después de respaldarlo)."
  echo "Ejecutá: sudo $0 --yes"
  exit 1
fi

if [[ $EUID -ne 0 ]]; then
  echo "Tenés que ejecutarlo como root, por ejemplo: sudo $0 --yes"
  exit 1
fi

if [[ ! -d "$XAMPP/bin" ]]; then
  echo "No se encontró XAMPP en $XAMPP"
  exit 1
fi

MYSQL_RUN_USER="nobody"
MYSQL_RUN_GROUP="nogroup"
if [[ -f "$MYCNF" ]]; then
  u=$(grep -E '^[[:space:]]*user[[:space:]]*=' "$MYCNF" 2>/dev/null | head -1 | sed 's/.*=[[:space:]]*//' | tr -d '\r' || true)
  if [[ -n "${u:-}" ]]; then
    MYSQL_RUN_USER="$u"
    MYSQL_RUN_GROUP="$u"
  fi
fi

echo "==> Usuario mysqld según config: $MYSQL_RUN_USER (grupo $MYSQL_RUN_GROUP)"

echo "==> Deteniendo MySQL (XAMPP)..."
"$XAMPP/lampp" stopmysql 2>/dev/null || true
sleep 2
pkill -u root mysqld 2>/dev/null || true
pkill -u root mariadbd 2>/dev/null || true
sleep 1

STAMP=$(date +%Y%m%d_%H%M%S)
BACKUP="$XAMPP/var/mysql.backup.$STAMP"
echo "==> Respaldando $DATADIR -> $BACKUP"
if [[ -d "$DATADIR" ]] && [[ -n "$(ls -A "$DATADIR" 2>/dev/null)" ]]; then
  cp -a "$DATADIR" "$BACKUP"
  echo "    Backup listo."
else
  echo "    (datadir vacío o inexistente, sin copia previa)"
  mkdir -p "$DATADIR"
fi

echo "==> Vaciando datadir..."
find "$DATADIR" -mindepth 1 -maxdepth 1 -exec rm -rf {} +

echo "==> Permisos..."
chown -R "$MYSQL_RUN_USER:$MYSQL_RUN_GROUP" "$DATADIR"
chmod 700 "$DATADIR" 2>/dev/null || true

INSTALLER=""
if [[ -x "$XAMPP/bin/mariadb-install-db" ]]; then
  INSTALLER="$XAMPP/bin/mariadb-install-db"
elif [[ -x "$XAMPP/bin/mysql_install_db" ]]; then
  INSTALLER="$XAMPP/bin/mysql_install_db"
else
  echo "No encontré mariadb-install-db ni mysql_install_db en $XAMPP/bin"
  exit 1
fi

echo "==> Inicializando tablas del sistema: $INSTALLER"
if [[ "$INSTALLER" == *mariadb-install-db ]]; then
  "$INSTALLER" --user="$MYSQL_RUN_USER" --basedir="$XAMPP" --datadir="$DATADIR"
else
  "$INSTALLER" --user="$MYSQL_RUN_USER" --basedir="$XAMPP" --datadir="$DATADIR"
fi

chown -R "$MYSQL_RUN_USER:$MYSQL_RUN_GROUP" "$DATADIR"

echo "==> Iniciando MySQL..."
"$XAMPP/lampp" startmysql

sleep 3
if [[ ! -S "$DATADIR/mysql.sock" ]] && [[ ! -S /tmp/mysql.sock ]]; then
  echo "Advertencia: socket no encontrado aún; esperando..."
  sleep 3
fi

export PATH="$XAMPP/bin:$PATH"
if mysql -uroot --socket="$DATADIR/mysql.sock" -e "SELECT 1 AS ok;" 2>/dev/null; then
  echo "==> MySQL responde por socket $DATADIR/mysql.sock"
elif mysql -uroot -e "SELECT 1 AS ok;" 2>/dev/null; then
  echo "==> MySQL responde (socket por defecto del cliente)"
else
  echo "==> ERROR: no se pudo conectar con mysql -uroot. Revisá:"
  echo "    tail -80 $DATADIR/*.err"
  exit 1
fi

if [[ -x "$XAMPP/bin/mysql_upgrade" ]]; then
  echo "==> mysql_upgrade (opcional)..."
  "$XAMPP/bin/mysql_upgrade" -u root 2>/dev/null || true
fi

echo ""
echo "Listo. Backup anterior en: $BACKUP"
echo "phpMyAdmin: root sin contraseña (típico XAMPP). Cambiá la clave si exponés el equipo a red."
