#!/bin/bash

# Validação de consistência entre ficheiros locais e servidor
# Desk-Moloni v3.0.1

echo "🔍 Validando consistência Local ↔ Servidor..."
echo "========================================="

SERVER="server.descomplicar.pt"
PORT="9443"
USER="root"
LOCAL_PATH="/media/ealmeida/Dados/Dev/desk-moloni/modules/desk_moloni"
REMOTE_PATH="/home/ealmeida/desk.descomplicar.pt/modules/desk_moloni"

# Cores para output
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

# Função para comparar ficheiros
compare_file() {
    local file=$1
    local local_file="$LOCAL_PATH/$file"
    local remote_file="$REMOTE_PATH/$file"
    
    if [ ! -f "$local_file" ]; then
        echo -e "${RED}❌ LOCAL: $file (não existe)${NC}"
        return 1
    fi
    
    # Calcular hash local
    local_hash=$(md5sum "$local_file" | cut -d' ' -f1)
    
    # Calcular hash remoto
    remote_hash=$(ssh -p $PORT $USER@$SERVER "md5sum $remote_file 2>/dev/null | cut -d' ' -f1")
    
    if [ -z "$remote_hash" ]; then
        echo -e "${RED}❌ REMOTO: $file (não existe)${NC}"
        return 1
    fi
    
    if [ "$local_hash" == "$remote_hash" ]; then
        echo -e "${GREEN}✅ SINCRONIZADO: $file${NC}"
        return 0
    else
        echo -e "${YELLOW}⚠️  DIFERENTE: $file${NC}"
        echo "   Local:  $local_hash"
        echo "   Remoto: $remote_hash"
        return 1
    fi
}

# Lista de ficheiros críticos para validar
CRITICAL_FILES=(
    "controllers/Dashboard.php"
    "controllers/Admin.php"
    "controllers/Mapping.php"
    "models/Desk_moloni_config_model.php"
    "models/Desk_moloni_sync_queue_model.php"
    "models/Desk_moloni_sync_log_model.php"
    "models/Desk_moloni_mapping_model.php"
    "models/Config_model.php"
    "libraries/PerfexHooks.php"
    "libraries/QueueProcessor.php"
    "libraries/MoloniApiClient.php"
    "helpers/desk_moloni_helper.php"
    "views/admin/partials/csrf_token.php"
    "assets/css/admin.css"
    "assets/js/admin.js"
)

echo "📋 Verificando ${#CRITICAL_FILES[@]} ficheiros críticos..."
echo ""

total_files=${#CRITICAL_FILES[@]}
synced_files=0
different_files=0
missing_files=0

for file in "${CRITICAL_FILES[@]}"; do
    if compare_file "$file"; then
        ((synced_files++))
    elif [ -f "$LOCAL_PATH/$file" ]; then
        ((different_files++))
    else
        ((missing_files++))
    fi
done

echo ""
echo "📊 RESUMO DA VALIDAÇÃO:"
echo "======================="
echo -e "✅ Sincronizados: ${GREEN}$synced_files${NC}/$total_files"
echo -e "⚠️  Diferentes:    ${YELLOW}$different_files${NC}/$total_files"
echo -e "❌ Em falta:      ${RED}$missing_files${NC}/$total_files"

# Calcular percentagem de consistência
consistency=$((synced_files * 100 / total_files))
echo ""
echo -e "🎯 Consistência: ${GREEN}$consistency%${NC}"

if [ $consistency -eq 100 ]; then
    echo -e "${GREEN}🎉 PERFEITO! Todos os ficheiros estão sincronizados!${NC}"
    exit 0
elif [ $consistency -ge 90 ]; then
    echo -e "${YELLOW}✨ MUITO BOM! Quase todos os ficheiros sincronizados${NC}"
    exit 0
else
    echo -e "${RED}⚠️ ATENÇÃO! Vários ficheiros não estão sincronizados${NC}"
    exit 1
fi