#!/bin/bash

# Script para testar lógicas de cron manualmente
# Uso: ./teste-logicas-cron.sh [tipo]

NUMERO_TESTE="553199329118"

echo "🧪 TESTE LÓGICAS CRON - Geocontrole"
echo "=================================="
echo "📱 Número: $NUMERO_TESTE"
echo ""

# Função para mostrar ajuda
mostrar_ajuda() {
    echo "Uso: $0 [tipo]"
    echo ""
    echo "Tipos disponíveis:"
    echo "  rnc-vencida      - Testa verificação RNC vencida"
    echo "  rnc-vencer       - Testa verificação RNC a vencer"
    echo "  analise-vencida  - Testa verificação análise SGI vencida"
    echo "  analise-vencer   - Testa verificação análise SGI a vencer"
    echo "  todas            - Executa todas as verificações"
    echo ""
    echo "Exemplos:"
    echo "  $0 rnc-vencida"
    echo "  $0 todas"
}

# Função para verificar se o servidor está rodando
verificar_servidor() {
    echo "🔍 Verificando se o servidor está rodando..."
    if curl -s http://localhost:3005/whatsapp/status > /dev/null 2>&1; then
        echo "✅ Servidor está rodando"
        return 0
    else
        echo "❌ Servidor não está respondendo na porta 3005"
        echo "💡 Execute: npm start"
        return 1
    fi
}

# Função para verificar se o WhatsApp está conectado
verificar_whatsapp() {
    echo "🔍 Verificando conexão WhatsApp..."
    local status=$(curl -s http://localhost:3005/whatsapp/status)
    
    if echo "$status" | grep -q '"connected":true'; then
        echo "✅ WhatsApp está conectado"
        return 0
    else
        echo "❌ WhatsApp não está conectado"
        echo "💡 Aguarde a conexão ou escaneie o QR code"
        return 1
    fi
}

# Função para testar RNC vencida
teste_rnc_vencida() {
    echo "🔍 Testando verificação de RNC vencida..."
    
    cat > /tmp/test_rnc_vencida.js << 'EOF'
const connection = require('./config/db');
const { sendWhatsAppNome } = require('./controllers/SGI/WhatsApp/whatsapp');

async function testarRncVencida() {
    try {
        console.log('Iniciando teste de RNC vencida...');
        const hoje = new Date();
        const searchQuery = 
            'SELECT * FROM acoesrnc WHERE Finalizado = "NÃO" AND DATEDIFF(?, Previsao) > 5 LIMIT 3';

        let results;
        if (connection.promise) {
            [results] = await connection.promise().query(searchQuery, [hoje]);
        } else {
            results = await new Promise((resolve, reject) => {
                connection.query(searchQuery, [hoje], (err, data) => {
                    if (err) reject(err);
                    else resolve(data);
                });
            });
        }

        console.log(`Encontrados ${results.length} registros vencidos`);

        if (results.length > 0) {
            const registro = results[0]; // Pegar primeiro registro para teste
            
            const whatsappData = {
                usuario: 'NUMERO_TESTE_PLACEHOLDER',
                subject: "🚨 [TESTE] Ação de RNC Vencida",
                text: `[TESTE AUTOMÁTICO]
                
A ação da RNC ${registro.Protocolo} está vencida há mais de 5 dias.

📅 Previsão: ${registro.Previsao}
⚠️ Status: ${registro.Finalizado}
👤 Responsável: ${registro.Responsavel}

Este é um teste do sistema de notificações.`
            };

            console.log('Enviando WhatsApp de teste...');
            const response = await sendWhatsAppNome(whatsappData, {
                status: (statusCode) => ({
                    json: (message) => {
                        console.log(`Status: ${statusCode}`, message);
                        process.exit(0);
                    }
                })
            });
        } else {
            console.log('Nenhuma RNC vencida encontrada. Enviando mensagem de teste...');
            
            const whatsappData = {
                usuario: 'NUMERO_TESTE_PLACEHOLDER',
                subject: "✅ [TESTE] Sistema RNC Funcionando",
                text: `[TESTE AUTOMÁTICO]
                
Sistema de verificação de RNC vencida está funcionando corretamente.

✅ Nenhuma RNC vencida encontrada no momento.
🕐 Teste executado em: ${new Date().toLocaleString('pt-BR')}

Este é um teste do sistema de notificações.`
            };

            const response = await sendWhatsAppNome(whatsappData, {
                status: (statusCode) => ({
                    json: (message) => {
                        console.log(`Status: ${statusCode}`, message);
                        process.exit(0);
                    }
                })
            });
        }
    } catch (error) {
        console.error('Erro no teste:', error);
        process.exit(1);
    }
}

testarRncVencida();
EOF

    # Substituir placeholder pelo número real
    sed -i "s/NUMERO_TESTE_PLACEHOLDER/$NUMERO_TESTE/g" /tmp/test_rnc_vencida.js
    
    # Executar teste
    cd /home/rafael.sullivan@lan.geocontrole.pt/git/Api-Rest
    node /tmp/test_rnc_vencida.js
    
    # Limpar arquivo temporário
    rm -f /tmp/test_rnc_vencida.js
}

# Função para testar RNC a vencer
teste_rnc_vencer() {
    echo "🔍 Testando verificação de RNC a vencer..."
    
    cat > /tmp/test_rnc_vencer.js << 'EOF'
const connection = require('./config/db');
const { sendWhatsAppNome } = require('./controllers/SGI/WhatsApp/whatsapp');

async function testarRncVencer() {
    try {
        console.log('Iniciando teste de RNC a vencer...');
        const hoje = new Date();
        const searchQuery = 
            'SELECT * FROM acoesrnc WHERE Finalizado = "NÃO" AND DATEDIFF(Previsao, ?) BETWEEN 0 AND 2 LIMIT 3';

        let results;
        if (connection.promise) {
            [results] = await connection.promise().query(searchQuery, [hoje]);
        } else {
            results = await new Promise((resolve, reject) => {
                connection.query(searchQuery, [hoje], (err, data) => {
                    if (err) reject(err);
                    else resolve(data);
                });
            });
        }

        console.log(`Encontrados ${results.length} registros a vencer`);

        if (results.length > 0) {
            const registro = results[0];
            
            const whatsappData = {
                usuario: 'NUMERO_TESTE_PLACEHOLDER',
                subject: "⚠️ [TESTE] Ação de RNC a Vencer",
                text: `[TESTE AUTOMÁTICO]
                
A ação da RNC ${registro.Protocolo} vence em breve.

📅 Previsão: ${registro.Previsao}
⚠️ Status: ${registro.Finalizado}
👤 Responsável: ${registro.Responsavel}

Este é um teste do sistema de notificações.`
            };

            console.log('Enviando WhatsApp de teste...');
            const response = await sendWhatsAppNome(whatsappData, {
                status: (statusCode) => ({
                    json: (message) => {
                        console.log(`Status: ${statusCode}`, message);
                        process.exit(0);
                    }
                })
            });
        } else {
            console.log('Nenhuma RNC a vencer encontrada. Enviando mensagem de teste...');
            
            const whatsappData = {
                usuario: 'NUMERO_TESTE_PLACEHOLDER',
                subject: "✅ [TESTE] Sistema RNC A Vencer Funcionando",
                text: `[TESTE AUTOMÁTICO]
                
Sistema de verificação de RNC a vencer está funcionando corretamente.

✅ Nenhuma RNC a vencer encontrada no momento.
🕐 Teste executado em: ${new Date().toLocaleString('pt-BR')}

Este é um teste do sistema de notificações.`
            };

            const response = await sendWhatsAppNome(whatsappData, {
                status: (statusCode) => ({
                    json: (message) => {
                        console.log(`Status: ${statusCode}`, message);
                        process.exit(0);
                    }
                })
            });
        }
    } catch (error) {
        console.error('Erro no teste:', error);
        process.exit(1);
    }
}

testarRncVencer();
EOF

    # Substituir placeholder pelo número real
    sed -i "s/NUMERO_TESTE_PLACEHOLDER/$NUMERO_TESTE/g" /tmp/test_rnc_vencer.js
    
    # Executar teste
    cd /home/rafael.sullivan@lan.geocontrole.pt/git/Api-Rest
    node /tmp/test_rnc_vencer.js
    
    # Limpar arquivo temporário
    rm -f /tmp/test_rnc_vencer.js
}

# Função para testar análise SGI vencida
teste_analise_vencida() {
    echo "🔍 Testando verificação de análise SGI vencida..."
    
    cat > /tmp/test_analise_vencida.js << 'EOF'
const connection = require('./config/db');
const { sendWhatsAppNome } = require('./controllers/SGI/WhatsApp/whatsapp');

async function testarAnaliseVencida() {
    try {
        console.log('Iniciando teste de análise SGI vencida...');
        const hoje = new Date();
        const searchQuery = 
            'SELECT * FROM registrodenaoconformidade WHERE Finalizado = "NÃO" AND DATEDIFF(?, Previsao) > 5 LIMIT 3';

        let results;
        if (connection.promise) {
            [results] = await connection.promise().query(searchQuery, [hoje]);
        } else {
            results = await new Promise((resolve, reject) => {
                connection.query(searchQuery, [hoje], (err, data) => {
                    if (err) reject(err);
                    else resolve(data);
                });
            });
        }

        console.log(`Encontrados ${results.length} registros de análise vencidos`);

        if (results.length > 0) {
            const registro = results[0];
            
            const whatsappData = {
                usuario: 'NUMERO_TESTE_PLACEHOLDER',
                subject: "🚨 [TESTE] Análise SGI Vencida",
                text: `[TESTE AUTOMÁTICO]
                
A análise SGI ${registro.Protocolo || registro.id} está vencida há mais de 5 dias.

📅 Previsão: ${registro.Previsao}
⚠️ Status: ${registro.Finalizado}
👤 Responsável: ${registro.Responsavel || 'Não informado'}

Este é um teste do sistema de notificações.`
            };

            console.log('Enviando WhatsApp de teste...');
            const response = await sendWhatsAppNome(whatsappData, {
                status: (statusCode) => ({
                    json: (message) => {
                        console.log(`Status: ${statusCode}`, message);
                        process.exit(0);
                    }
                })
            });
        } else {
            console.log('Nenhuma análise SGI vencida encontrada. Enviando mensagem de teste...');
            
            const whatsappData = {
                usuario: 'NUMERO_TESTE_PLACEHOLDER',
                subject: "✅ [TESTE] Sistema Análise SGI Funcionando",
                text: `[TESTE AUTOMÁTICO]
                
Sistema de verificação de análise SGI vencida está funcionando corretamente.

✅ Nenhuma análise SGI vencida encontrada no momento.
🕐 Teste executado em: ${new Date().toLocaleString('pt-BR')}

Este é um teste do sistema de notificações.`
            };

            const response = await sendWhatsAppNome(whatsappData, {
                status: (statusCode) => ({
                    json: (message) => {
                        console.log(`Status: ${statusCode}`, message);
                        process.exit(0);
                    }
                })
            });
        }
    } catch (error) {
        console.error('Erro no teste:', error);
        process.exit(1);
    }
}

testarAnaliseVencida();
EOF

    # Substituir placeholder pelo número real
    sed -i "s/NUMERO_TESTE_PLACEHOLDER/$NUMERO_TESTE/g" /tmp/test_analise_vencida.js
    
    # Executar teste
    cd /home/rafael.sullivan@lan.geocontrole.pt/git/Api-Rest
    node /tmp/test_analise_vencida.js
    
    # Limpar arquivo temporário
    rm -f /tmp/test_analise_vencida.js
}

# Processar argumentos
case $1 in
    "rnc-vencida")
        if verificar_servidor && verificar_whatsapp; then
            teste_rnc_vencida
        fi
        ;;
    "rnc-vencer")
        if verificar_servidor && verificar_whatsapp; then
            teste_rnc_vencer
        fi
        ;;
    "analise-vencida")
        if verificar_servidor && verificar_whatsapp; then
            teste_analise_vencida
        fi
        ;;
    "todas")
        if verificar_servidor && verificar_whatsapp; then
            echo "🔄 Executando todos os testes..."
            echo ""
            teste_rnc_vencida
            echo ""
            teste_rnc_vencer
            echo ""
            teste_analise_vencida
        fi
        ;;
    *)
        mostrar_ajuda
        ;;
esac

echo ""
echo "🎉 Teste finalizado!"
echo "📱 Verifique as mensagens no número: $NUMERO_TESTE"