#!/bin/bash
# fix_lawfirm_mysql_password.sh - Resetea la contraseña del usuario MySQL y actualiza el .env
# Uso: ./fix_lawfirm_mysql_password.sh [cpanel_user] [db_name] [db_user]

CPANEL_USER="${1:-lawfirm}"
DB_NAME="${2:-lawfirm_db}"
DB_USER="${3:-lawfirm_usr}"

echo "🔧 CORRIGIENDO CONTRASEÑA MYSQL PARA $CPANEL_USER"
echo "=================================================="
echo ""

# Verificar que el usuario cPanel existe
if ! whmapi1 listaccts searchtype=user search="$CPANEL_USER" 2>/dev/null | grep -q "\"user\": *\"$CPANEL_USER\""; then
    echo "❌ Usuario cPanel '$CPANEL_USER' NO existe"
    echo "⚠️  Continuando de todas formas para resetear contraseña desde MySQL..."
fi
echo ""

# Generar nueva contraseña
gen_password() {
  if command -v openssl >/dev/null 2>&1; then
    openssl rand -base64 12 | tr -d '/+=' | cut -c1-14
  else
    date +%s | sha1sum | cut -c1-14
  fi
}

NEW_PASSWORD=$(gen_password)
echo "🔑 Nueva contraseña generada: $NEW_PASSWORD"
echo ""

# Resetear contraseña desde MySQL directamente (como root)
echo "1️⃣ Reseteando contraseña del usuario MySQL desde MySQL..."
mysql -e "SET PASSWORD FOR '${DB_USER}'@'localhost' = PASSWORD('${NEW_PASSWORD}');" 2>&1
if [ $? -eq 0 ]; then
    echo "   ✅ Contraseña reseteada exitosamente"
else
    echo "   ⚠️  Error al resetear contraseña. Intentando método alternativo..."
    # Método alternativo: usar ALTER USER (MySQL 5.7+)
    mysql -e "ALTER USER '${DB_USER}'@'localhost' IDENTIFIED BY '${NEW_PASSWORD}';" 2>&1
    if [ $? -eq 0 ]; then
        echo "   ✅ Contraseña reseteada usando ALTER USER"
    else
        echo "   ❌ Error al resetear contraseña"
        echo "   Intenta manualmente:"
        echo "   mysql -e \"ALTER USER '${DB_USER}'@'localhost' IDENTIFIED BY '${NEW_PASSWORD}';\""
        exit 1
    fi
fi
echo ""

# Verificar que la nueva contraseña funciona
echo "2️⃣ Verificando que la nueva contraseña funciona..."
test_result=$(mysql -u"$DB_USER" -p"$NEW_PASSWORD" -h localhost "$DB_NAME" -e "SELECT 1 as test;" 2>&1)
if [ $? -eq 0 ]; then
    echo "   ✅ Conexión exitosa con la nueva contraseña"
else
    echo "   ❌ La nueva contraseña no funciona"
    echo "   Error: $(echo "$test_result" | head -1)"
    exit 1
fi
echo ""

# Actualizar .env del proyecto
echo "3️⃣ Actualizando archivo .env del proyecto..."
ENV_FILE="/home/$CPANEL_USER/public_html/bewpro-lawfirm/.env"
if [ -f "$ENV_FILE" ]; then
    # Usar awk para actualizar la contraseña de forma segura
    awk -v new_pass="$NEW_PASSWORD" '
    /^DB_PASSWORD=/ { $0="DB_PASSWORD=" new_pass; }
    { print; }
    ' "$ENV_FILE" > "$ENV_FILE.tmp" && mv "$ENV_FILE.tmp" "$ENV_FILE"

    # Verificar que se actualizó
    env_password=$(grep "^DB_PASSWORD=" "$ENV_FILE" | cut -d= -f2)
    if [ "$env_password" = "$NEW_PASSWORD" ]; then
        echo "   ✅ Archivo .env actualizado correctamente"
    else
        echo "   ⚠️  El .env puede no haberse actualizado correctamente"
        echo "   Contraseña en .env: ${env_password:0:10}..."
    fi
else
    echo "   ⚠️  Archivo .env no existe en $ENV_FILE"
fi
echo ""

# Actualizar archivo de credenciales
echo "4️⃣ Actualizando archivo de credenciales..."
CRED_FILE="/root/credenciales"
if [ -f "$CRED_FILE" ]; then
    # Eliminar todas las entradas antiguas de este usuario
    sed -i "/Cuenta cPanel: $CPANEL_USER/,/^$/d" "$CRED_FILE"

    # Agregar nueva entrada
    {
        echo "Cuenta cPanel: $CPANEL_USER"
        echo "Base de datos: $DB_NAME"
        echo "Usuario DB: $DB_USER"
        echo "Contraseña DB: $NEW_PASSWORD"
        echo ""
    } >> "$CRED_FILE"

    echo "   ✅ Archivo de credenciales actualizado"
else
    echo "   ⚠️  Archivo de credenciales no existe, creándolo..."
    {
        echo "Cuenta cPanel: $CPANEL_USER"
        echo "Base de datos: $DB_NAME"
        echo "Usuario DB: $DB_USER"
        echo "Contraseña DB: $NEW_PASSWORD"
        echo ""
    } > "$CRED_FILE"
    echo "   ✅ Archivo de credenciales creado"
fi
echo ""

# Probar conexión desde Laravel
echo "5️⃣ Probando conexión desde Laravel..."
if [ -f "$ENV_FILE" ] && [ -d "/home/$CPANEL_USER/public_html/bewpro-lawfirm" ]; then
    PHP_CLI=$(find /opt/cpanel/ea-php*/root/usr/bin/php 2>/dev/null | head -1)
    if [ -z "$PHP_CLI" ]; then
        PHP_CLI="/usr/local/bin/php"
    fi

    test_laravel=$(sudo -u "$CPANEL_USER" bash -c "
        cd /home/$CPANEL_USER/public_html/bewpro-lawfirm
        $PHP_CLI artisan tinker --execute=\"try { DB::connection()->getPdo(); echo 'OK'; } catch (Exception \$e) { echo 'ERROR: ' . \$e->getMessage(); }\" 2>&1
    " 2>&1)

    if echo "$test_laravel" | grep -qi "OK"; then
        echo "   ✅ Conexión desde Laravel exitosa"
    else
        echo "   ⚠️  Conexión desde Laravel falló"
        echo "   Resultado: $(echo "$test_laravel" | head -3)"
    fi
else
    echo "   ⚠️  No se puede probar desde Laravel (proyecto no encontrado)"
fi
echo ""

echo "✅ Corrección completada"
echo ""
echo "📋 RESUMEN:"
echo "   Usuario MySQL: $DB_USER"
echo "   Base de datos: $DB_NAME"
echo "   Nueva contraseña: $NEW_PASSWORD"
echo ""
echo "💡 Próximos pasos:"
echo "   1. Ejecutar migraciones:"
echo "      cd /home/$CPANEL_USER/public_html/bewpro-lawfirm"
echo "      php artisan migrate:fresh --seed"
echo ""

