#!/bin/bash

# =================================================================
# SCRIPT DE BACKUP E MIGRAÇÃO INTELIGENTE PARA WORDPRESS (v1.1)
#
# DESCRIÇÃO:
# Versão 1.1: Removida a dependência do comando 'bc' para máxima
# compatibilidade com todos os ambientes de hospedagem.
#
# Este script cria um backup de migração completo e se adapta
# ao tamanho do site.
#
# 1. Lê as credenciais do banco de dados do `wp-config.php`.
# 2. Realiza um dump completo do banco de dados.
# 3. VERIFICA O TAMANHO TOTAL DO SITE:
#    - Se for MENOR ou IGUAL a 10GB: Cria um único arquivo .tar.gz
#    - Se for MAIOR que 10GB: Divide o backup em partes lógicas
#
# COMO USAR:
# 1. Salve este código como `migracao_backup.sh` (ou o nome que preferir)
# 2. Coloque o arquivo na pasta raiz da sua instalação WordPress.
# 3. Dê permissão de execução: chmod +x migracao_backup.sh
# 4. Execute o script: ./migracao_backup.sh
#
# =================================================================

# --- CONFIGURAÇÕES ---
THRESHOLD_GB=10

# --- PREPARAÇÃO DO SCRIPT ---
set -e

echo "================================================"
echo "  Iniciando Script de Migração Inteligente  "
echo "================================================"

SITE_DIR=$(pwd)
WP_CONFIG_PATH="${SITE_DIR}/wp-config.php"
SCRIPT_NAME=$(basename "$0")

# 1. VERIFICAÇÃO INICIAL
if [ ! -f "$WP_CONFIG_PATH" ]; then
    echo "[ERRO] O arquivo wp-config.php não foi encontrado em $SITE_DIR." >&2
    echo "       Certifique-se de executar este script a partir da pasta raiz do seu WordPress." >&2
    exit 1
fi
echo "-> Encontrado wp-config.php. Lendo credenciais..."

# 2. EXTRAÇÃO DAS CREDENCIAIS
get_wp_config_value() {
    grep "$1" "$WP_CONFIG_PATH" | sed -n "s/.*, *'\(.*\)' *);/\1/p"
}
DB_NAME=$(get_wp_config_value "DB_NAME")
DB_USER=$(get_wp_config_value "DB_USER")
DB_PASSWORD=$(get_wp_config_value "DB_PASSWORD")
DB_HOST=$(get_wp_config_value "DB_HOST")

if [ -z "$DB_NAME" ] || [ -z "$DB_USER" ] || [ -z "$DB_PASSWORD" ] || [ -z "$DB_HOST" ]; then
    echo "[ERRO] Não foi possível ler uma ou mais credenciais do wp-config.php." >&2
    exit 1
fi
echo "-> Credenciais lidas com sucesso para o banco: '$DB_NAME'"

# 3. BACKUP DO BANCO DE DADOS
DATE_FORMAT=$(date +%Y-%m-%d)
DB_DUMP_FILE="dump_sql_${DB_NAME}_${DATE_FORMAT}.sql"
echo "------------------------------------------------"
echo "-> Iniciando backup do banco de dados..."
mysqldump -h"$DB_HOST" -u"$DB_USER" -p"$DB_PASSWORD" "$DB_NAME" > "$DB_DUMP_FILE"
echo "-> Dump do banco de dados criado com sucesso: $DB_DUMP_FILE"

# 4. VERIFICAÇÃO DE TAMANHO E LÓGICA DE BACKUP
THRESHOLD_BYTES=$((THRESHOLD_GB * 1024 * 1024 * 1024))
echo "------------------------------------------------"
echo "-> Verificando o tamanho total do site (limite: ${THRESHOLD_GB}GB)..."
TOTAL_SIZE_BYTES=$(du -sb . | awk '{print $1}')

# === MUDANÇA PRINCIPAL AQUI ===
# Calculamos em MB para exibição, sem usar o 'bc'.
TOTAL_SIZE_MB=$((TOTAL_SIZE_BYTES / 1024 / 1024))
echo "-> Tamanho total detectado: aproximadamente ${TOTAL_SIZE_MB} MB."
# A lógica de comparação principal abaixo não foi alterada e funciona perfeitamente.

# --- SE O SITE FOR PEQUENO (< 10GB) ---
if [ "$TOTAL_SIZE_BYTES" -le "$THRESHOLD_BYTES" ]; then
    echo "-> O site é menor que ${THRESHOLD_GB}GB. Criando um único arquivo de backup..."
    FINAL_ARCHIVE_NAME="MIGRACAO_COMPLETA_${DB_NAME}_${DATE_FORMAT}.tar.gz"

    tar --warning=no-file-changed -czf "$FINAL_ARCHIVE_NAME" \
        --exclude="./$FINAL_ARCHIVE_NAME" \
        --exclude="./$SCRIPT_NAME" \
        .
    
    echo "-> Limpando arquivos temporários..."
    rm "$DB_DUMP_FILE"

    echo ""
    echo "========================================================="
    echo "  PROCESSO CONCLUÍDO COM SUCESSO!  "
    echo "========================================================="
    echo "Seu backup completo está no arquivo:"
    echo ""
    echo "  ${SITE_DIR}/${FINAL_ARCHIVE_NAME}"
    echo ""
    echo "Faça o download deste arquivo para a nova hospedagem."
    echo "========================================================="

# --- SE O SITE FOR GRANDE (> 10GB) ---
else
    echo "-> O site é maior que ${THRESHOLD_GB}GB. O backup será dividido em partes para evitar erros."
    echo "------------------------------------------------"

    # Parte 1: Uploads
    echo "-> Parte 1/3: Compactando a pasta de uploads (wp-content/uploads)..."
    UPLOADS_ARCHIVE="MIGRACAO_PARTE1_UPLOADS_${DATE_FORMAT}.tar.gz"
    tar -czf "$UPLOADS_ARCHIVE" ./wp-content/uploads
    echo "-> Arquivo de uploads criado: $UPLOADS_ARCHIVE"
    echo "------------------------------------------------"

    # Parte 2: Plugins e Temas
    echo "-> Parte 2/3: Compactando plugins e temas..."
    PLUGINS_THEMES_ARCHIVE="MIGRACAO_PARTE2_PLUGINS_TEMAS_${DATE_FORMAT}.tar.gz"
    tar -czf "$PLUGINS_THEMES_ARCHIVE" ./wp-content/plugins ./wp-content/themes
    echo "-> Arquivo de plugins e temas criado: $PLUGINS_THEMES_ARCHIVE"
    echo "------------------------------------------------"

    # Parte 3: Raiz do site e Banco de Dados
    echo "-> Parte 3/3: Compactando a raiz do site..."
    RAIZ_DB_ARCHIVE="MIGRACAO_PARTE3_RAIZ_E_DB_${DATE_FORMAT}.tar.gz"
    
    # Criamos uma lista temporária de arquivos/pastas para incluir no backup.
    # Isso evita problemas com nomes de arquivos e é mais seguro que múltiplos --exclude.
    find . -maxdepth 1 -type f -print0 > file_list.txt
    find . -maxdepth 1 -type d ! -name 'wp-content' ! -name '.' -print0 >> file_list.txt
    
    tar -czf "$RAIZ_DB_ARCHIVE" --null --files-from=file_list.txt
    echo "-> Arquivo da raiz criado: $RAIZ_DB_ARCHIVE"
    
    echo "------------------------------------------------"
    echo "-> Limpando arquivos temporários..."
    # O arquivo SQL já está dentro do backup da raiz
    # rm "$DB_DUMP_FILE" # Esta linha foi removida pois o DB já está no tar da raiz
    rm file_list.txt

    echo ""
    echo "========================================================="
    echo "  PROCESSO CONCLUÍDO COM SUCESSO! (EM PARTES)  "
    echo "========================================================="
    echo "Seu backup foi dividido. Faça o download de TODOS os"
    echo "seguintes arquivos para a nova hospedagem:"
    echo ""
    echo "  1. ${SITE_DIR}/${UPLOADS_ARCHIVE}"
    echo "  2. ${SITE_DIR}/${PLUGINS_THEMES_ARCHIVE}"
    echo "  3. ${SITE_DIR}/${RAIZ_DB_ARCHIVE}"
    echo "  4. E O ARQUIVO SQL SEPARADO: ${DB_DUMP_FILE}"
    echo ""
    echo "========================================================="
fi

exit 0
