require('dotenv').config();
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;
const ACCESS_TOKEN = process.env.ZENVIA_ACCESS_TOKEN;

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

// =============================================
// ROTA 1: 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);
        
        // Na Zenvia, o token é o próprio Access-Token?
        // Ou precisa gerar um JWT? Verifique na documentação do Webphone
        
        // Por enquanto, retornamos o mesmo token (ajustar conforme docs)
        res.json({
            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({ error: error.message });
    }
});

// =============================================
// ROTA 2: Iniciar chamada (via API)
// =============================================
app.post('/call', async (req, res) => {
    try {
        const { to, from, caller } = req.body;
        
        console.log(`📞 Iniciando chamada: ${from} → ${to}`);
        
        // Endpoint da Zenvia para criar chamada
        // Ajuste conforme documentação real
        const response = await zenviaClient.post('/call', {
            numero_destino: to,
            numero_origem: from || process.env.DEFAULT_CALLER_ID,
            gravar_audio: true,
            tags: {
                caller: caller,
                timestamp: Date.now()
            }
        });
        
        res.json({
            success: true,
            callId: response.data.dados.id,
            status: 'initiated'
        });
        
    } catch (error) {
        console.error('❌ Erro ao iniciar chamada:', error.message);
        res.status(500).json({ error: error.message });
    }
});

// =============================================
// ROTA 3: Webhook para eventos de chamada
// =============================================
app.post('/webhook/call-status', (req, res) => {
    console.log('📡 Webhook recebido:', req.body);
    
    // Aqui você processa os eventos:
    // - chamada iniciada
    // - chamada atendida
    // - chamada finalizada
    // - gravação disponível
    
    const event = req.body;
    
    // Exemplo de processamento
    switch(event.status) {
        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;
    }
    
    res.json({ received: true });
});

// =============================================
// ROTA 4: Status da chamada
// =============================================
app.get('/call/:id', async (req, res) => {
    try {
        const { id } = req.params;
        
        const response = await zenviaClient.get(`/call/${id}`);
        
        res.json({
            success: true,
            call: response.data.dados
        });
        
    } catch (error) {
        console.error('❌ Erro ao buscar chamada:', error.message);
        res.status(500).json({ error: error.message });
    }
});

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

const PORT = process.env.PORT || 3001;
app.listen(PORT, () => {
    console.log(`✅ Servidor Zenvia rodando na porta ${PORT}`);
    console.log(`🔑 Access Token configurado: ${ACCESS_TOKEN.substring(0, 10)}...`);
    console.log(`📡 Webhook URL: https://son.tvitecnologia.com.br/api/webhook/call-status`);
});