// /telefonia/js/webphone.js
class WebphoneZenvia {
    constructor(config) {
        this.config = config;
        this.iframe = null;
        this.callbacks = {
            onIncomingCall: null,
            onStatusChange: null,
            onCallStart: null,
            onCallEnd: null,
            onError: null
        };
        
        console.log('🔄 WebphoneZenvia inicializando...', {
            ramal: config.ramal,
            hasToken: !!config.access_token
        });
        
        if (window.adicionarLog) window.adicionarLog('🔄 Inicializando Webphone...', 'info');
    }

    async conectar() {
        console.log('🔌 Conectando ao Webphone Zenvia...');
        if (window.adicionarLog) window.adicionarLog('🔌 Conectando...', 'info');
        
        try {
            const url = await this.gerarURLWebphone();
            this.criarIframe(url);
            this.triggerStatusChange('conectado');
        } catch (error) {
            console.error('❌ Erro ao conectar:', error);
            if (window.adicionarLog) window.adicionarLog(`❌ Erro: ${error.message}`, 'erro');
        }
    }

    async gerarURLWebphone() {
        const ramal = this.config.ramal;
        
        console.log('📡 Gerando URL do Webphone via proxy para ramal:', ramal);
        
        // Usar o proxy que já funciona
        const response = await fetch(`/telefonia/api/proxy.php?endpoint=webphone&ramal=${ramal}&tipo=embedded`);
        const data = await response.json();
        
        console.log('📥 Resposta da Zenvia:', data);
        
        if (!data.sucesso) {
            throw new Error(data.mensagem || 'Erro ao gerar URL');
        }
        
        if (!data.dados || !data.dados.url) {
            throw new Error('URL não retornada pela Zenvia');
        }
        
        console.log('✅ URL gerada:', data.dados.url);
        return data.dados.url;
    }

    criarIframe(url) {
        // Remover iframe existente
        if (this.iframe) {
            this.iframe.remove();
        }
        
        // Criar container se não existir
        let container = document.getElementById('webphone-iframe-container');
        if (!container) {
            container = document.createElement('div');
            container.id = 'webphone-iframe-container';
            container.style.width = '100%';
            container.style.height = '550px';
            container.style.border = '2px solid #e2e8f0';
            container.style.borderRadius = '12px';
            container.style.overflow = 'hidden';
            container.style.marginTop = '20px';
            container.style.boxShadow = '0 4px 6px -1px rgba(0,0,0,0.1)';
            
            // Inserir após os controles
            const webphoneContainer = document.querySelector('.webphone-container');
            if (webphoneContainer) {
                webphoneContainer.appendChild(container);
            } else {
                document.body.appendChild(container);
            }
        }
        
        // Criar iframe
        this.iframe = document.createElement('iframe');
        this.iframe.src = url;
        this.iframe.style.width = '100%';
        this.iframe.style.height = '100%';
        this.iframe.style.border = 'none';
        this.iframe.allow = 'microphone *; camera *; autoplay';
        
        container.innerHTML = '';
        container.appendChild(this.iframe);
        
        // Adicionar listener para mensagens do iframe (eventos do webphone)
        window.addEventListener('message', (event) => {
            if (event.source !== this.iframe.contentWindow) return;
            
            const data = event.data;
            console.log('📥 Evento do Webphone:', data);
            
            // Eventos documentados na Zenvia
            switch(data.message) {
                case 'chegandoChamada':
                    console.log('📞 Chamada recebida de:', data.numeroChegando);
                    this.triggerIncomingCall({
                        numeroChegando: data.numeroChegando,
                        chamadaRecebidaId: data.chamadaRecebidaId
                    });
                    break;
                    
                case 'status':
                    console.log('📊 Status da chamada:', data.status);
                    this.triggerStatusChange(data.status);
                    break;
                    
                case 'chamada_id':
                    console.log('🆔 ID da chamada Zenvia:', data.chamada_id);
                    this.triggerCallStart(data.chamada_id);
                    break;
                    
                case 'status_erro':
                    console.error('❌ Erro no Webphone:', data.status_erro);
                    this.triggerError(data.status_erro);
                    break;
            }
        });
        
        if (window.adicionarLog) window.adicionarLog('✅ Webphone carregado no iframe', 'sucesso');
        
        // Mostrar instruções
        console.log('📞 Webphone carregado! Use os controles dentro do iframe para ligar.');
    }

    // Funções para compatibilidade com a interface existente
    fazerChamada(numero) {
        if (!this.iframe) {
            if (window.adicionarLog) window.adicionarLog('❌ Webphone não conectado', 'erro');
            return false;
        }
        
        // Enviar comando para o iframe discar
        this.iframe.contentWindow.postMessage({
            message: 'chamaNumero',
            numero: numero
        }, '*');
        
        if (window.adicionarLog) window.adicionarLog(`📞 Discando ${numero}...`, 'info');
        return true;
    }

    desligar() {
        if (this.iframe) {
            this.iframe.contentWindow.postMessage({ message: 'hangup' }, '*');
            if (window.adicionarLog) window.adicionarLog('⏹️ Desligando chamada...', 'info');
        }
    }

    atender() {
        if (this.iframe) {
            this.iframe.contentWindow.postMessage({ message: 'answer' }, '*');
            if (window.adicionarLog) window.adicionarLog('✅ Atendendo chamada...', 'sucesso');
        }
    }

    mutar() {
        if (this.iframe) {
            this.iframe.contentWindow.postMessage({ message: 'mute' }, '*');
            if (window.adicionarLog) window.adicionarLog('🔇 Alternando mute...', 'info');
        }
    }

    desconectar() {
        if (this.iframe) {
            this.iframe.contentWindow.postMessage({ message: 'desconectar' }, '*');
            if (window.adicionarLog) window.adicionarLog('🔌 Desconectando...', 'info');
        }
    }

    // Sistema de eventos
    on(evento, callback) {
        this.callbacks[evento] = callback;
    }

    triggerIncomingCall(data) {
        if (this.callbacks.onIncomingCall) this.callbacks.onIncomingCall(data);
    }

    triggerStatusChange(status) {
        if (this.callbacks.onStatusChange) this.callbacks.onStatusChange(status);
    }

    triggerCallStart(chamadaId) {
        if (this.callbacks.onCallStart) this.callbacks.onCallStart(chamadaId);
    }

    triggerCallEnd() {
        if (this.callbacks.onCallEnd) this.callbacks.onCallEnd();
    }

    triggerError(error) {
        if (this.callbacks.onError) this.callbacks.onError(error);
    }
}

// Exportar para uso global
window.WebphoneZenvia = WebphoneZenvia;
console.log('✅ WebphoneZenvia carregado - Versão Oficial Zenvia');
if (window.adicionarLog) window.adicionarLog('✅ WebphoneZenvia carregado', 'sucesso');