<?php
// includes/whatsapp-helper.php

class WhatsAppHelper {
    private $db;
    
    public function __construct() {
        global $db;
        $this->db = $db;
    }
    
    /**
     * Cria a tabela de configurações WhatsApp se não existir
     * Agora com suporte a múltiplas URLs
     */
    public function createTableIfNotExists() {
        try {
            // Verificar se a tabela já existe
            $tableExists = $this->db->tableExists('whatsapp_settings');
            
            if (!$tableExists) {
                $sql = "CREATE TABLE `whatsapp_settings` (
                    `id` int(11) NOT NULL AUTO_INCREMENT,
                    `title` varchar(255) NOT NULL DEFAULT '¿Quieres recibir contenido exclusivo y conectar con otros estudiantes?',
                    `url_1` varchar(500) NOT NULL DEFAULT 'https://a2.contrateservicos.com/redirect.php?p=6877184d392d0',
                    `url_2` varchar(500) DEFAULT NULL,
                    `url_3` varchar(500) DEFAULT NULL,
                    `selected_url` enum('url_1','url_2','url_3') NOT NULL DEFAULT 'url_1',
                    `button_text` varchar(255) NOT NULL DEFAULT 'Únete a nuestro grupo de WhatsApp y recibe cursos gratis todos los días',
                    `position` varchar(20) NOT NULL DEFAULT 'after-third',
                    `active` tinyint(1) NOT NULL DEFAULT 1,
                    `created_at` datetime DEFAULT CURRENT_TIMESTAMP,
                    `updated_at` datetime DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
                    PRIMARY KEY (`id`)
                ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci";
                
                $this->db->query($sql);
                $this->db->execute();
                
                // Inserir configuração padrão
                $this->insertDefaultSettings();
                
                logInfo("Tabela whatsapp_settings criada com sucesso");
            }
            
            return true;
        } catch (Exception $e) {
            logError("Erro ao criar tabela whatsapp_settings: " . $e->getMessage());
            return false;
        }
    }
    
    /**
     * Insere configurações padrão
     */
    private function insertDefaultSettings() {
        try {
            $this->db->query("INSERT INTO whatsapp_settings (title, url_1, url_2, url_3, selected_url, button_text, position, active) 
                             VALUES (:title, :url_1, :url_2, :url_3, :selected_url, :button_text, :position, :active)");
            
            $this->db->bind(':title', '¿Quieres recibir contenido exclusivo y conectar con otros estudiantes?');
            $this->db->bind(':url_1', 'https://a2.contrateservicos.com/redirect.php?p=6877184d392d0');
            $this->db->bind(':url_2', null);
            $this->db->bind(':url_3', null);
            $this->db->bind(':selected_url', 'url_1');
            $this->db->bind(':button_text', 'Únete a nuestro grupo de WhatsApp y recibe cursos gratis todos los días');
            $this->db->bind(':position', 'after-third');
            $this->db->bind(':active', 1);
            
            $result = $this->db->execute();
            logInfo("Configurações padrão do WhatsApp inseridas: " . ($result ? 'sucesso' : 'falha'));
            return $result;
        } catch (Exception $e) {
            logError("Erro ao inserir configurações padrão do WhatsApp: " . $e->getMessage());
            return false;
        }
    }
    
    /**
     * Busca as configurações atuais do WhatsApp
     */
    public function getSettings() {
        try {
            // Garantir que a tabela existe
            $this->createTableIfNotExists();
            
            $this->db->query("SELECT * FROM whatsapp_settings ORDER BY id DESC LIMIT 1");
            $result = $this->db->single();
            
            // Se não encontrar configurações, retornar padrões
            if (!$result || !is_array($result)) {
                logInfo("Nenhuma configuração WhatsApp encontrada, retornando padrões");
                return $this->getDefaultSettings();
            }
            
            // Garantir que todas as chaves necessárias existem
            $defaultSettings = $this->getDefaultSettings();
            $result = array_merge($defaultSettings, $result);
            
            // Converter active para boolean
            $result['active'] = isset($result['active']) ? (bool)$result['active'] : true;
            
            // Garantir que valores obrigatórios não sejam null ou vazios
            if (empty($result['title'])) {
                $result['title'] = $defaultSettings['title'];
            }
            if (empty($result['url_1'])) {
                $result['url_1'] = $defaultSettings['url_1'];
            }
            if (empty($result['button_text'])) {
                $result['button_text'] = $defaultSettings['button_text'];
            }
            if (empty($result['position'])) {
                $result['position'] = $defaultSettings['position'];
            }
            if (empty($result['selected_url'])) {
                $result['selected_url'] = $defaultSettings['selected_url'];
            }
            
            logInfo("Configurações WhatsApp carregadas com sucesso");
            return $result;
        } catch (Exception $e) {
            logError("Erro ao buscar configurações do WhatsApp: " . $e->getMessage());
            return $this->getDefaultSettings();
        }
    }
    
    /**
     * Retorna configurações padrão
     */
    private function getDefaultSettings() {
        return [
            'title' => '¿Quieres recibir contenido exclusivo y conectar con otros estudiantes?',
            'url_1' => 'https://a2.contrateservicos.com/redirect.php?p=6877184d392d0',
            'url_2' => null,
            'url_3' => null,
            'selected_url' => 'url_1',
            'button_text' => 'Únete a nuestro grupo de WhatsApp y recibe cursos gratis todos los días',
            'position' => 'after-third',
            'active' => true,
            'created_at' => null,
            'updated_at' => null
        ];
    }
    
    /**
     * Atualiza as configurações do WhatsApp
     */
    public function updateSettings($data) {
        try {
            // Garantir que a tabela existe
            $this->createTableIfNotExists();
            
            // Log dos dados recebidos
            logInfo("Tentando atualizar configurações WhatsApp: " . json_encode($data));
            
            // Verificar se já existe configuração
            $this->db->query("SELECT id FROM whatsapp_settings LIMIT 1");
            $existing = $this->db->single();
            
            if ($existing) {
                // Atualizar configuração existente
                logInfo("Atualizando configuração existente com ID: " . $existing['id']);
                
                $this->db->query("UPDATE whatsapp_settings SET 
                                 title = :title,
                                 url_1 = :url_1,
                                 url_2 = :url_2,
                                 url_3 = :url_3,
                                 selected_url = :selected_url,
                                 button_text = :button_text,
                                 position = :position,
                                 active = :active,
                                 updated_at = NOW()
                                 WHERE id = :id");
                
                $this->db->bind(':id', $existing['id']);
            } else {
                // Inserir nova configuração
                logInfo("Inserindo nova configuração WhatsApp");
                
                $this->db->query("INSERT INTO whatsapp_settings (title, url_1, url_2, url_3, selected_url, button_text, position, active, created_at, updated_at) 
                                 VALUES (:title, :url_1, :url_2, :url_3, :selected_url, :button_text, :position, :active, NOW(), NOW())");
            }
            
            // Bind dos parâmetros
            $this->db->bind(':title', $data['title']);
            $this->db->bind(':url_1', $data['url_1']);
            $this->db->bind(':url_2', isset($data['url_2']) ? $data['url_2'] : null);
            $this->db->bind(':url_3', isset($data['url_3']) ? $data['url_3'] : null);
            $this->db->bind(':selected_url', isset($data['selected_url']) ? $data['selected_url'] : 'url_1');
            $this->db->bind(':button_text', $data['button_text']);
            $this->db->bind(':position', $data['position']);
            $this->db->bind(':active', $data['active'] ? 1 : 0);
            
            $result = $this->db->execute();
            
            if ($result) {
                logInfo("Configurações WhatsApp atualizadas com sucesso");
            } else {
                logError("Falha ao executar query de atualização WhatsApp");
            }
            
            return $result;
        } catch (Exception $e) {
            logError("Erro ao atualizar configurações do WhatsApp: " . $e->getMessage());
            return false;
        }
    }
    
    /**
     * Busca URL específica baseada na seleção
     */
    public function getUrlBySelection($selectedUrl = null) {
        $settings = $this->getSettings();
        
        if (!is_array($settings)) {
            return 'https://a2.contrateservicos.com/redirect.php?p=6877184d392d0'; // URL padrão
        }
        
        // Se não especificado, usar a URL padrão das configurações
        if ($selectedUrl === null) {
            $selectedUrl = isset($settings['selected_url']) ? $settings['selected_url'] : 'url_1';
        }
        
        // Retornar a URL correspondente
        switch ($selectedUrl) {
            case 'url_2':
                return !empty($settings['url_2']) ? $settings['url_2'] : $settings['url_1'];
            case 'url_3':
                return !empty($settings['url_3']) ? $settings['url_3'] : $settings['url_1'];
            case 'url_1':
            default:
                return $settings['url_1'];
        }
    }
    
    /**
     * Gera o HTML do botão WhatsApp com URL específica
     */
    public function generateWhatsAppHTML($selectedUrl = null) {
        $settings = $this->getSettings();
        
        // Verificar se settings é um array válido
        if (!is_array($settings)) {
            $settings = $this->getDefaultSettings();
        }
        
        // Verificar se está ativo
        if (!isset($settings['active']) || !$settings['active']) {
            return '';
        }
        
        // Buscar a URL correta baseada na seleção
        $url = $this->getUrlBySelection($selectedUrl);
        
        // Garantir que todas as chaves necessárias existem com valores padrão
        $title = isset($settings['title']) && $settings['title'] !== null ? $settings['title'] : '¿Quieres recibir contenido exclusivo y conectar con otros estudiantes?';
        $buttonText = isset($settings['button_text']) && $settings['button_text'] !== null ? $settings['button_text'] : 'Únete a nuestro grupo de WhatsApp y recibe cursos gratis todos los días';
        $position = isset($settings['position']) && $settings['position'] !== null ? $settings['position'] : 'after-third';
        
        $html = '<div class="whatsapp-cta-container" data-position="' . htmlspecialchars($position) . '">
            <h3 class="whatsapp-title">' . htmlspecialchars($title) . '</h3>
            <a href="' . htmlspecialchars($url) . '" class="whatsapp-cta-button" target="_blank" rel="noopener">
                <i class="fab fa-whatsapp"></i> ' . htmlspecialchars($buttonText) . '
            </a>
        </div>';
        
        return $html;
    }
    
    /**
     * NOVO: Gera apenas o HTML do botão (sem o container completo)
     */
    public function generateButtonHTML($selectedUrl = null) {
        $settings = $this->getSettings();
        
        // Verificar se settings é um array válido
        if (!is_array($settings)) {
            $settings = $this->getDefaultSettings();
        }
        
        // Verificar se está ativo
        if (!isset($settings['active']) || !$settings['active']) {
            return '';
        }
        
        // Buscar a URL correta baseada na seleção
        $url = $this->getUrlBySelection($selectedUrl);
        
        // Garantir que todas as chaves necessárias existem com valores padrão
        $buttonText = isset($settings['button_text']) && $settings['button_text'] !== null ? $settings['button_text'] : 'Únete a nuestro grupo de WhatsApp y recibe cursos gratis todos los días';
        
        $html = '<a href="' . htmlspecialchars($url) . '" class="whatsapp-cta-button" target="_blank" rel="noopener">
            <i class="fab fa-whatsapp"></i> ' . htmlspecialchars($buttonText) . '
        </a>';
        
        return $html;
    }
    
    /**
     * NOVO: Gera HTML personalizado com parâmetros específicos
     */
    public function generateCustomHTML($customTitle = null, $customButtonText = null, $customUrl = null, $selectedUrl = null) {
        $settings = $this->getSettings();
        
        // Verificar se settings é um array válido
        if (!is_array($settings)) {
            $settings = $this->getDefaultSettings();
        }
        
        // Verificar se está ativo
        if (!isset($settings['active']) || !$settings['active']) {
            return '';
        }
        
        // Usar valores customizados ou padrões
        $title = $customTitle ?: (isset($settings['title']) ? $settings['title'] : '¿Quieres recibir contenido exclusivo y conectar con otros estudiantes?');
        $buttonText = $customButtonText ?: (isset($settings['button_text']) ? $settings['button_text'] : 'Únete a nuestro grupo de WhatsApp y recibe cursos gratis todos los días');
        $url = $customUrl ?: $this->getUrlBySelection($selectedUrl);
        
        $html = '<div class="whatsapp-cta-container">
            <h3 class="whatsapp-title">' . htmlspecialchars($title) . '</h3>
            <a href="' . htmlspecialchars($url) . '" class="whatsapp-cta-button" target="_blank" rel="noopener">
                <i class="fab fa-whatsapp"></i> ' . htmlspecialchars($buttonText) . '
            </a>
        </div>';
        
        return $html;
    }
    
    /**
     * Alias para compatibilidade
     */
    public function generateWhatsAppButton($selectedUrl = null) {
        return $this->generateWhatsAppHTML($selectedUrl);
    }
    
    /**
     * Insere o botão WhatsApp no conteúdo baseado na posição configurada
     */
    public function insertWhatsAppInContent($content, $selectedUrl = null, $forceInsert = false) {
        $settings = $this->getSettings();
        
        // Verificar se settings é válido
        if (!is_array($settings)) {
            $settings = $this->getDefaultSettings();
        }
        
        if (!isset($settings['active']) || (!$settings['active'] && !$forceInsert)) {
            return $content;
        }
        
        // Remove botões WhatsApp existentes para evitar duplicação
        $content = preg_replace('/<div class="whatsapp-cta-container".*?<\/div>/s', '', $content);
        
        $whatsappHtml = $this->generateWhatsAppHTML($selectedUrl);
        
        // Garantir que position existe
        $position = isset($settings['position']) && $settings['position'] !== null ? $settings['position'] : 'after-third';
        
        // Inserir baseado na posição
        return $this->insertElementInContent($content, $whatsappHtml, $position);
    }
    
    /**
     * Insere um elemento HTML em uma posição específica do conteúdo
     */
    private function insertElementInContent($content, $elementHtml, $position) {
        // Dividir o conteúdo em parágrafos
        $pattern = '/<p[^>]*>(.*?)<\/p>/s';
        preg_match_all($pattern, $content, $matches, PREG_OFFSET_CAPTURE);
        $paragraphs = $matches[0];
        
        if (empty($paragraphs)) {
            // Se não houver parágrafos, adicionar no final
            return $content . $elementHtml;
        }
        
        $totalParagraphs = count($paragraphs);
        $insertIndex = 0;
        
        // Determinar índice de inserção baseado na posição
        switch ($position) {
            case 'after-first':
                $insertIndex = 0;
                break;
            case 'after-second':
                $insertIndex = min(1, $totalParagraphs - 1);
                break;
            case 'after-third':
                $insertIndex = min(2, $totalParagraphs - 1);
                break;
            case 'middle':
                $insertIndex = floor($totalParagraphs / 2);
                break;
            case 'before-last':
                $insertIndex = max(0, $totalParagraphs - 2);
                break;
            case 'end':
                $insertIndex = $totalParagraphs - 1;
                break;
            default:
                $insertIndex = min(2, $totalParagraphs - 1); // Default: after-third
        }
        
        // Encontrar a posição de inserção no texto
        if (isset($paragraphs[$insertIndex])) {
            $paragraph = $paragraphs[$insertIndex][0];
            $offset = $paragraphs[$insertIndex][1];
            $insertPosition = $offset + strlen($paragraph);
            
            // Inserir o elemento
            $beforeInsert = substr($content, 0, $insertPosition);
            $afterInsert = substr($content, $insertPosition);
            
            return $beforeInsert . $elementHtml . $afterInsert;
        }
        
        // Se não conseguir inserir na posição específica, adicionar no final
        return $content . $elementHtml;
    }
    
    /**
     * Retorna lista de URLs disponíveis para seleção
     */
    public function getAvailableUrls() {
        $settings = $this->getSettings();
        $urls = [];
        
        if (!empty($settings['url_1'])) {
            $urls['url_1'] = [
                'key' => 'url_1',
                'label' => 'Grupo 1',
                'url' => $settings['url_1'],
                'preview' => $this->generateUrlPreview($settings['url_1'])
            ];
        }
        
        if (!empty($settings['url_2'])) {
            $urls['url_2'] = [
                'key' => 'url_2',
                'label' => 'Grupo 2',
                'url' => $settings['url_2'],
                'preview' => $this->generateUrlPreview($settings['url_2'])
            ];
        }
        
        if (!empty($settings['url_3'])) {
            $urls['url_3'] = [
                'key' => 'url_3',
                'label' => 'Grupo 3',
                'url' => $settings['url_3'],
                'preview' => $this->generateUrlPreview($settings['url_3'])
            ];
        }
        
        return $urls;
    }
    
    /**
     * Gera preview curto da URL para exibição
     */
    private function generateUrlPreview($url) {
        if (strlen($url) <= 50) {
            return $url;
        }
        return substr($url, 0, 47) . '...';
    }
    
    /**
     * Verifica se o WhatsApp está ativo
     */
    public function isActive() {
        try {
            $settings = $this->getSettings();
            
            // Verificar se settings é válido
            if (!is_array($settings)) {
                return false;
            }
            
            return isset($settings['active']) ? (bool)$settings['active'] : false;
        } catch (Exception $e) {
            logError("Erro ao verificar status ativo do WhatsApp: " . $e->getMessage());
            return false;
        }
    }
    
    /**
     * Ativa ou desativa o WhatsApp
     */
    public function setActive($active) {
        try {
            $this->createTableIfNotExists();
            
            $this->db->query("UPDATE whatsapp_settings SET active = :active, updated_at = NOW()");
            $this->db->bind(':active', $active ? 1 : 0);
            return $this->db->execute();
        } catch (Exception $e) {
            logError("Erro ao alterar status do WhatsApp: " . $e->getMessage());
            return false;
        }
    }
    
    /**
     * Valida uma URL do WhatsApp
     */
    public function validateWhatsAppUrl($url) {
    // Verificar se a URL não está vazia
    if (empty($url)) {
        return false;
    }
    
    // Verificar formato básico de URL
    if (!filter_var($url, FILTER_VALIDATE_URL)) {
        return false;
    }
    
    // Verificar se é uma URL do WhatsApp (mais permissiva)
    $validPatterns = [
        '/^https:\/\/chat\.whatsapp\.com\/[A-Za-z0-9_-]+$/i',  // Grupos
        '/^https:\/\/wa\.me\/[0-9+]+$/i',                        // Contatos diretos
        '/^https:\/\/api\.whatsapp\.com\/send\?phone=[0-9+]+/i' // API send
    ];
    
    foreach ($validPatterns as $pattern) {
        if (preg_match($pattern, $url)) {
            return true;
        }
    }
    
    // Verificação adicional para URLs de grupo mais flexível
    if (strpos($url, 'chat.whatsapp.com') !== false && 
        preg_match('/^https:\/\/chat\.whatsapp\.com\/[A-Za-z0-9_-]{10,}$/i', $url)) {
        return true;
    }
    
    return false;
}
    
    /**
     * Gera CSS para o botão WhatsApp
     */
    public function generateWhatsAppCSS() {
        return '
        <style>
        .whatsapp-cta-container {
            text-align: center;
            margin: 2rem 0;
            padding: 1.5rem;
            background-color: rgba(37, 211, 102, 0.1);
            border-radius: 12px;
            border: 1px solid rgba(37, 211, 102, 0.2);
            animation: fadeInUp 0.6s ease-out;
        }
        
        .whatsapp-title {
            font-size: 1.25rem;
            margin-bottom: 1rem;
            color: #075E54;
            font-weight: 600;
            line-height: 1.4;
        }

        .whatsapp-cta-button {
            display: inline-block;
            background-color: #25D366;
            color: white !important;
            font-weight: 600;
            padding: 1rem 2rem;
            border-radius: 8px;
            text-decoration: none !important;
            transition: all 0.3s ease;
            box-shadow: 0 4px 15px rgba(37, 211, 102, 0.4);
            font-size: 1.1rem;
            border: none;
            cursor: pointer;
        }

        .whatsapp-cta-button:hover {
            background-color: #128C7E;
            transform: translateY(-3px);
            box-shadow: 0 8px 25px rgba(37, 211, 102, 0.5);
            color: white !important;
        }

        .whatsapp-cta-button i {
            margin-right: 0.5rem;
            font-size: 1.2rem;
        }
        
        @keyframes fadeInUp {
            from {
                opacity: 0;
                transform: translateY(20px);
            }
            to {
                opacity: 1;
                transform: translateY(0);
            }
        }
        
        /* Responsividade */
        @media (max-width: 768px) {
            .whatsapp-cta-container {
                margin: 1.5rem 0;
                padding: 1rem;
            }
            
            .whatsapp-title {
                font-size: 1.1rem;
            }
            
            .whatsapp-cta-button {
                padding: 0.875rem 1.5rem;
                font-size: 1rem;
            }
        }
        </style>';
    }
    
    /**
     * Debug e diagnóstico do sistema
     */
    public function diagnose() {
        $issues = [];
        
        try {
            // Verificar se a tabela existe
            $tableExists = $this->db->tableExists('whatsapp_settings');
            if (!$tableExists) {
                $issues[] = "Tabela whatsapp_settings não existe";
            } else {
                $issues[] = "✓ Tabela whatsapp_settings existe";
            }
            
            // Verificar se há configurações
            $settings = $this->getSettings();
            if (empty($settings['title'])) {
                $issues[] = "Nenhuma configuração encontrada";
            } else {
                $issues[] = "✓ Configurações carregadas: " . $settings['title'];
                
                // Verificar URLs disponíveis
                $availableUrls = $this->getAvailableUrls();
                $issues[] = "✓ URLs disponíveis: " . count($availableUrls);
                foreach ($availableUrls as $url) {
                    $issues[] = "  - " . $url['label'] . ": " . $url['preview'];
                }
            }
            
            // Verificar conexão com banco
            $this->db->query("SELECT 1");
            $this->db->execute();
            $issues[] = "✓ Conexão com banco funcionando";
            
        } catch (Exception $e) {
            $issues[] = "ERRO: " . $e->getMessage();
        }
        
        return $issues;
    }
}

// Instanciar a classe globalmente com tratamento de erro
try {
    $whatsappHelper = new WhatsAppHelper();
} catch (Exception $e) {
    logError("Erro ao instanciar WhatsAppHelper: " . $e->getMessage());
    // Criar um objeto mock para evitar erros
    $whatsappHelper = new class {
        public function getSettings() { return ['active' => false]; }
        public function isActive() { return false; }
        public function generateWhatsAppButton($selectedUrl = null) { return ''; }
        public function generateWhatsAppHTML($selectedUrl = null) { return ''; }
        public function generateButtonHTML($selectedUrl = null) { return ''; }
        public function generateCustomHTML($customTitle = null, $customButtonText = null, $customUrl = null, $selectedUrl = null) { return ''; }
        public function insertWhatsAppInContent($content, $selectedUrl = null) { return $content; }
        public function getAvailableUrls() { return []; }
        public function getUrlBySelection($selectedUrl = null) { return ''; }
        public function createTableIfNotExists() { return false; }
        public function updateSettings($data) { return false; }
        public function diagnose() { return ['ERRO: WhatsAppHelper não pôde ser inicializado']; }
        public function validateWhatsAppUrl($url) { return false; }
        public function generateWhatsAppCSS() { return ''; }
        public function setActive($active) { return false; }
    };
}