// Carregar dotenv com caminho absoluto (igual ao teste que funcionou)
require('dotenv').config({ path: '/home/tvitec62/son.tvitecnologia.com.br/zenvia-backend/.env' });

// Log de diagnóstico
console.log('📁 Diretório atual:', process.cwd());
console.log('📁 __dirname:', __dirname);
console.log('🔑 Token lido:', process.env.ZENVIA_ACCESS_TOKEN ? '✅ OK' : '❌ NÃO ENCONTRADO');

const express = require('express');
const cors = require('cors');
const axios = require('axios');

const app = express();
app.use(cors());
app.use(express.json());
app.use(express.urlencoded({ extended: true }));

// Configuração da API Zenvia
const ZENVIA_API = process.env.ZENVIA_API_URL || 'https://voice-api.zenvia.com';
const ACCESS_TOKEN = process.env.ZENVIA_ACCESS_TOKEN;

// Verificar se o token está configurado
if (!ACCESS_TOKEN) {
    console.error('❌ ERRO: ZENVIA_ACCESS_TOKEN não configurado no arquivo .env');
    console.error('📁 Caminho usado:', '/home/tvitec62/son.tvitecnologia.com.br/zenvia-backend/.env');
    console.error('📁 Diretório atual:', process.cwd());
    console.error('📁 __dirname:', __dirname);
    process.exit(1);
}

console.log('✅ Servidor Zenvia iniciado');
console.log(`🔑 Access Token configurado: ${ACCESS_TOKEN.substring(0, 10)}...`);

// Cliente HTTP configurado para Zenvia
const zenviaClient = axios.create({
    baseURL: ZENVIA_API,
    headers: {
        'Access-Token': ACCESS_TOKEN,
        'Content-Type': 'application/json'
    }
});

// =============================================
// ROTA 1: Health check
// =============================================
app.get('/health', (req, res) => {
    res.json({
        status: 'OK',
        service: 'Zenvia Backend',
        timestamp: new Date().toISOString(),
        token_configured: !!ACCESS_TOKEN
    });
});

// =============================================
// ROTA 2: Gerar token para o webfone
// =============================================
app.get('/token', async (req, res) => {
    try {
        const identity = req.query.identity || `user_${Date.now()}`;
        
        console.log(`🎫 Gerando token para: ${identity}`);
        
        res.json({
            success: true,
            token: ACCESS_TOKEN,
            identity: identity,
            expires: new Date(Date.now() + 3600000).toISOString()
        });
        
    } catch (error) {
        console.error('❌ Erro ao gerar token:', error.message);
        res.status(500).json({ 
            success: false, 
            error: error.message 
        });
    }
});

// =============================================
// ROTA 3: Iniciar chamada (via API)
// =============================================
app.post('/call', async (req, res) => {
    try {
        const { to, from, caller } = req.body;
        
        if (!to) {
            return res.status(400).json({ 
                success: false, 
                error: 'Número de destino é obrigatório' 
            });
        }
        
        console.log(`📞 Iniciando chamada: ${from || 'padrão'} → ${to}`);
        
        const response = await zenviaClient.post('/chamada', {
            numero_destino: to,
            numero_origem: from || process.env.DEFAULT_CALLER_ID,
            gravar_audio: true,
            tags: {
                caller: caller || 'webphone',
                timestamp: Date.now()
            }
        });
        
        res.json({
            success: true,
            callId: response.data.dados.id,
            status: 'initiated',
            details: response.data
        });
        
    } catch (error) {
        console.error('❌ Erro ao iniciar chamada:', error.response?.data || error.message);
        res.status(500).json({ 
            success: false, 
            error: error.response?.data?.mensagem || error.message 
        });
    }
});

// =============================================
// ROTA 4: Webhook para eventos de chamada
// =============================================
app.post('/webhook/call-status', (req, res) => {
    console.log('📡 Webhook recebido:', JSON.stringify(req.body, null, 2));
    
    const event = req.body;
    
    switch(event.tipo) {
        case 'iniciada':
            console.log(`🟢 Chamada iniciada: ${event.call_id}`);
            break;
        case 'atendida':
            console.log(`✅ Chamada atendida: ${event.call_id}`);
            break;
        case 'finalizada':
            console.log(`🔴 Chamada finalizada: ${event.call_id}`);
            break;
        case 'gravacao':
            console.log(`🎵 Gravação disponível: ${event.url}`);
            break;
        default:
            console.log(`📌 Evento desconhecido:`, event);
    }
    
    res.json({ received: true, timestamp: Date.now() });
});

// =============================================
// ROTA 5: Buscar status de uma chamada (CORRIGIDA)
// =============================================
app.get('/call/:id', async (req, res) => {
    try {
        const { id } = req.params;
        
        if (!id || id === 'undefined') {
            return res.json({ 
                success: true, 
                call: { status: 'processing' } 
            });
        }
        
        try {
            const response = await zenviaClient.get(`/chamada/${id}`);
            res.json({
                success: true,
                call: response.data.dados
            });
        } catch (apiError) {
            if (apiError.response && apiError.response.status === 404) {
                console.log(`⏳ Chamada ${id} ainda processando...`);
                res.json({ 
                    success: true, 
                    call: { status: 'processing' } 
                });
            } else {
                throw apiError;
            }
        }
        
    } catch (error) {
        console.error('❌ Erro ao buscar chamada:', error.message);
        res.status(500).json({ 
            success: false, 
            error: error.message 
        });
    }
});

// =============================================
// ROTA 6: Listar números (DIDs) da conta
// =============================================
app.get('/numbers', async (req, res) => {
    try {
        const response = await zenviaClient.get('/did');
        
        res.json({
            success: true,
            numbers: response.data.dados
        });
        
    } catch (error) {
        console.error('❌ Erro ao buscar números:', error.message);
        res.status(500).json({ 
            success: false, 
            error: error.message 
        });
    }
});

// =============================================
// ROTA 7: Verificar saldo da conta
// =============================================
app.get('/balance', async (req, res) => {
    try {
        const response = await zenviaClient.get('/saldo');
        
        res.json({
            success: true,
            balance: response.data.dados
        });
        
    } catch (error) {
        console.error('❌ Erro ao buscar saldo:', error.message);
        res.status(500).json({ 
            success: false, 
            error: error.message 
        });
    }
});

const PORT = process.env.PORT || 3001;
app.listen(PORT, () => {
    console.log(`✅ Servidor Zenvia rodando na porta ${PORT}`);
    console.log(`📡 Health check: http://localhost:${PORT}/health`);
    console.log(`🔑 Token endpoint: http://localhost:${PORT}/token?identity=test`);
    console.log(`📞 Call endpoint: http://localhost:${PORT}/call (POST)`);
    console.log(`📡 Webhook URL: http://localhost:${PORT}/webhook/call-status`);
});

// =============================================
// ROTA 8: Gerar URL do Webphone (CORRIGIDA)
// =============================================
app.get('/webphone-url', async (req, res) => {
    try {
        const tipo = req.query.tipo || 'floating'; // floating, embedded, hidden
        const ligarPara = req.query.ligarPara || '';
        
        // Usar a API oficial para gerar a URL
        const response = await zenviaClient.get('/webphone', {
            params: {
                ramal: 4000,
                tipo: tipo
                // Se quiser discagem automática: , ligar_para: ligarPara
            }
        });
        
        console.log('📡 Resposta da API Zenvia:', response.data);
        
        res.json({
            success: true,
            url: response.data.dados.url,
            api_response: response.data
        });
        
    } catch (error) {
        console.error('❌ Erro ao gerar URL do Webphone:', error.response?.data || error.message);
        res.status(500).json({ 
            success: false, 
            error: error.response?.data?.mensagem || error.message,
            details: error.response?.data
        });
    }
});