#!/bin/bash
# verify_mysql_credentials.sh - Verifica las credenciales MySQL de un proyecto
# Uso: ./verify_mysql_credentials.sh [cpanel_user] [project_path]

CPANEL_USER="${1:-lawfirm}"
PROJECT_PATH="${2:-/home/$CPANEL_USER/public_html/bewpro-lawfirm}"

echo "🔍 VERIFICACIÓN DE CREDENCIALES MYSQL"
echo "======================================"
echo "Usuario cPanel: $CPANEL_USER"
echo "Ruta del proyecto: $PROJECT_PATH"
echo ""

# 1. Verificar que el proyecto existe
if [ ! -d "$PROJECT_PATH" ]; then
    echo "❌ El proyecto no existe en $PROJECT_PATH"
    exit 1
fi

# 2. Leer credenciales del .env
ENV_FILE="$PROJECT_PATH/.env"
if [ ! -f "$ENV_FILE" ]; then
    echo "❌ Archivo .env no existe en $ENV_FILE"
    exit 1
fi

echo "📄 Credenciales en .env:"
echo "---"
DB_CONNECTION=$(grep "^DB_CONNECTION=" "$ENV_FILE" | cut -d= -f2)
DB_HOST=$(grep "^DB_HOST=" "$ENV_FILE" | cut -d= -f2)
DB_PORT=$(grep "^DB_PORT=" "$ENV_FILE" | cut -d= -f2)
DB_DATABASE=$(grep "^DB_DATABASE=" "$ENV_FILE" | cut -d= -f2)
DB_USERNAME=$(grep "^DB_USERNAME=" "$ENV_FILE" | cut -d= -f2)
DB_PASSWORD=$(grep "^DB_PASSWORD=" "$ENV_FILE" | cut -d= -f2)

echo "DB_CONNECTION=$DB_CONNECTION"
echo "DB_HOST=$DB_HOST"
echo "DB_PORT=$DB_PORT"
echo "DB_DATABASE=$DB_DATABASE"
echo "DB_USERNAME=$DB_USERNAME"
echo "DB_PASSWORD=${DB_PASSWORD:0:10}... (${#DB_PASSWORD} caracteres)"
echo "---"
echo ""

# 3. Verificar usuario MySQL en MySQL directamente
echo "🔍 Verificando usuario MySQL en MySQL:"
if command -v mysql >/dev/null 2>&1; then
    echo "   Buscando usuario: '$DB_USERNAME' o '${CPANEL_USER}_${DB_USERNAME}'"
    MYSQL_USERS=$(mysql -e "SELECT User, Host FROM mysql.user WHERE (User = '${DB_USERNAME}' OR User = '${CPANEL_USER}_${DB_USERNAME}') AND Host='localhost';" 2>/dev/null)
    if [ -n "$MYSQL_USERS" ]; then
        echo "$MYSQL_USERS" | while read -r line; do
            echo "   ✅ $line"
        done
    else
        echo "   ❌ No se encontró el usuario MySQL"
    fi
else
    echo "   ⚠️  mysql client no disponible"
fi
echo ""

# 4. Verificar base de datos
echo "🔍 Verificando base de datos:"
if command -v mysql >/dev/null 2>&1; then
    DB_EXISTS=$(mysql -e "SHOW DATABASES LIKE '${DB_DATABASE}';" 2>/dev/null | grep -c "^${DB_DATABASE}$")
    if [ "$DB_EXISTS" -eq 1 ]; then
        echo "   ✅ Base de datos '$DB_DATABASE' existe"
    else
        echo "   ❌ Base de datos '$DB_DATABASE' NO existe"
    fi
else
    echo "   ⚠️  mysql client no disponible"
fi
echo ""

# 5. Probar conexión con las credenciales del .env
echo "🔍 Probando conexión MySQL con credenciales del .env:"
if command -v mysql >/dev/null 2>&1; then
    # Probar con el nombre exacto del .env
    TEST_RESULT=$(mysql -u"$DB_USERNAME" -p"$DB_PASSWORD" -h localhost "$DB_DATABASE" -e "SELECT 1 as test;" 2>&1)
    if [ $? -eq 0 ]; then
        echo "   ✅ Conexión exitosa con usuario '$DB_USERNAME'"
    else
        echo "   ❌ Conexión fallida con usuario '$DB_USERNAME'"
        echo "      Error: $(echo "$TEST_RESULT" | head -1)"

        # Probar con prefijo del cPanel user
        PREFIXED_USER="${CPANEL_USER}_${DB_USERNAME}"
        echo "   🔄 Probando con usuario prefijado: '$PREFIXED_USER'"
        TEST_RESULT2=$(mysql -u"$PREFIXED_USER" -p"$DB_PASSWORD" -h localhost "$DB_DATABASE" -e "SELECT 1 as test;" 2>&1)
        if [ $? -eq 0 ]; then
            echo "   ✅ Conexión exitosa con usuario '$PREFIXED_USER'"
            echo "   ⚠️  El .env debería usar '$PREFIXED_USER' en lugar de '$DB_USERNAME'"
        else
            echo "   ❌ Conexión también falla con '$PREFIXED_USER'"
            echo "      Error: $(echo "$TEST_RESULT2" | head -1)"
        fi
    fi
else
    echo "   ⚠️  mysql client no disponible"
fi
echo ""

# 6. Verificar credenciales guardadas
echo "🔍 Credenciales guardadas en /root/credenciales:"
CRED_FILE="/root/credenciales"
if [ -f "$CRED_FILE" ]; then
    CRED_SECTION=$(grep -A 10 "Cuenta cPanel: $CPANEL_USER" "$CRED_FILE" | head -10)
    if [ -n "$CRED_SECTION" ]; then
        echo "$CRED_SECTION" | while read -r line; do
            if echo "$line" | grep -q "Contraseña DB:"; then
                PASS_LINE=$(echo "$line" | cut -d: -f2- | sed 's/^ *//')
                PASS_LEN=${#PASS_LINE}
                if [ "$PASS_LEN" -gt 50 ]; then
                    echo "   ❌ Contraseña corrupta: ${PASS_LINE:0:20}... ($PASS_LEN caracteres)"
                else
                    echo "   ✅ $line"
                fi
            else
                echo "   $line"
            fi
        done
    else
        echo "   ⚠️  No se encontraron credenciales guardadas para $CPANEL_USER"
    fi
else
    echo "   ⚠️  Archivo de credenciales no existe"
fi
echo ""

# 7. Probar desde Laravel
echo "🔍 Probando conexión desde Laravel:"
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

if [ -f "$PHP_CLI" ] && [ -d "$PROJECT_PATH" ]; then
    LARAVEL_TEST=$(sudo -u "$CPANEL_USER" bash -c "
        cd \"$PROJECT_PATH\" || exit 1
        $PHP_CLI artisan tinker --execute=\"try { DB::connection()->getPdo(); echo 'OK'; } catch (Exception \$e) { echo 'ERROR: ' . \$e->getMessage(); }\" 2>&1
    " 2>&1)

    if echo "$LARAVEL_TEST" | grep -qi "OK"; then
        echo "   ✅ Laravel puede conectarse a la base de datos"
    else
        echo "   ❌ Laravel NO puede conectarse a la base de datos"
        echo "      Error: $(echo "$LARAVEL_TEST" | grep -i "error\|exception" | head -1)"
    fi
else
    echo "   ⚠️  No se puede probar desde Laravel (PHP CLI o proyecto no encontrado)"
fi
echo ""

# 8. Resumen y recomendaciones
echo "📋 RESUMEN:"
echo "---"
echo "Usuario en .env: $DB_USERNAME"
echo "Base de datos: $DB_DATABASE"
echo "Contraseña: ${#DB_PASSWORD} caracteres"
echo ""
echo "💡 RECOMENDACIONES:"
if [ -n "$TEST_RESULT" ] && echo "$TEST_RESULT" | grep -qi "access denied"; then
    echo "   1. El usuario MySQL existe pero la contraseña no coincide"
    echo "   2. Ejecuta: mysql -e \"ALTER USER '${DB_USERNAME}'@'localhost' IDENTIFIED BY '${DB_PASSWORD}';\""
    echo "   3. O actualiza el .env con la contraseña correcta"
fi
echo "---"

