<?php

if (!defined('ABSPATH')) exit;

// Inclui as funções que renderizam o conteúdo das outras abas
require_once plugin_dir_path(__FILE__) . 'settings-niveis.php'; //
require_once plugin_dir_path(__FILE__) . 'settings-stores.php'; //

// Adiciona o submenu unificado "Configurações" ao menu principal "1MZ Admin"
add_action('admin_menu', function() {
    add_submenu_page(
        'edit.php?post_type=impulsionamento', // Menu pai
        'Configurações do Plugin', // Título da página
        'Configurações', // Nome do menu
        'manage_options', // Capacidade necessária (administrador)
        'impulsionamento_config', // Slug da página
        'imz_render_unified_config_page' // Função que renderiza a página
    );
});

// Função que renderiza a página de configurações com abas
function imz_render_unified_config_page() {
    // Determina a aba ativa. 'geral' é a padrão.
    $active_tab = isset($_GET['tab']) ? sanitize_key($_GET['tab']) : 'geral';
    ?>
    <div class="wrap">
        <h1>Configurações do Plugin 1MZ Admin</h1>
        <p>Gira todas as opções do seu plugin a partir desta página.</p>

        <h2 class="nav-tab-wrapper">
            <a href="?post_type=impulsionamento&page=impulsionamento_config&tab=geral" class="nav-tab <?php echo $active_tab == 'geral' ? 'nav-tab-active' : ''; ?>">Geral & Pagamentos</a>
            <a href="?post_type=impulsionamento&page=impulsionamento_config&tab=niveis" class="nav-tab <?php echo $active_tab == 'niveis' ? 'nav-tab-active' : ''; ?>">Níveis de Hype</a>
            <a href="?post_type=impulsionamento&page=impulsionamento_config&tab=lojas" class="nav-tab <?php echo $active_tab == 'lojas' ? 'nav-tab-active' : ''; ?>">Lojas Digitais</a>
            <a href="?post_type=impulsionamento&page=impulsionamento_config&tab=artista_pro" class="nav-tab <?php echo $active_tab == 'artista_pro' ? 'nav-tab-active' : ''; ?>">Artista PRO</a>
            <a href="?post_type=impulsionamento&page=impulsionamento_config&tab=downloads" class="nav-tab <?php echo $active_tab == 'downloads' ? 'nav-tab-active' : ''; ?>">Downloads</a>
            <a href="?post_type=impulsionamento&page=impulsionamento_config&tab=integracoes" class="nav-tab <?php echo $active_tab == 'integracoes' ? 'nav-tab-active' : ''; ?>">Integrações</a>
        </h2>

        <form method="post" action="options.php">
            <?php
            // Carrega os campos da aba correta usando settings_fields e do_settings_sections
            // ou chama a função de renderização específica para Níveis e Lojas
            switch ($active_tab) {
                case 'niveis':
                    settings_fields('imz_niveis_group'); // Grupo de settings para níveis
                    imz_render_niveis_page_content(); // Função de conteúdo
                    break;
                case 'lojas':
                    settings_fields('imz_stores_group'); // Grupo de settings para lojas
                    imz_render_stores_settings_page_content(); // Função de conteúdo
                    break;
                case 'artista_pro':
                    settings_fields('imz_config_group_pro'); // Grupo de settings PRO
                    do_settings_sections('imz_config_seccao_pro'); // Secção PRO
                    break;
                case 'downloads':
                    settings_fields('imz_config_group_downloads'); // Grupo de settings Downloads
                    do_settings_sections('imz_config_seccao_downloads'); // Secção Downloads
                    break;
                case 'integracoes':
                    settings_fields('imz_config_group_integracoes'); // Grupo de settings Integrações
                    do_settings_sections('imz_config_seccao_integracoes'); // Secção Integrações
                    break;
                case 'geral':
                default: // 'geral' é o padrão
                    settings_fields('imz_config_group_geral'); // Grupo de settings Geral
                    do_settings_sections('imz_config_seccao_geral'); // Secção Geral
                    break;
            }

            // O botão de salvar só aparece se não for uma das páginas com botão próprio (Níveis, Lojas)
            if ($active_tab !== 'niveis' && $active_tab !== 'lojas') {
                 submit_button(); // Botão padrão "Salvar alterações"
            }
            ?>
        </form>

        <?php
        // Formulário de cálculo manual de engajamentos (fora do form principal)
        if ($active_tab === 'downloads' && function_exists('imz_render_engagement_calc_form')) {
            imz_render_engagement_calc_form();
        }
        ?>
    </div>
    <?php
}

/**
 * Função de sanitização para os pacotes de pagamento.
 * Garante que os valores são numéricos e URLs são válidos. Ordena por valor.
 * @param array $input Dados brutos do formulário.
 * @return array Dados sanitizados e ordenados.
 */
function imz_sanitize_payment_packages($input) {
    $new_input = [];
    if (isset($input) && is_array($input)) {
        foreach ($input as $package) {
            // Ignora pacotes sem valor
            if (!isset($package['amount']) || !is_numeric($package['amount']) || $package['amount'] <= 0) continue;
            $new_input[] = [
                'amount'    => absint($package['amount']), // Garante inteiro positivo
                'image_url' => isset($package['image_url']) ? esc_url_raw($package['image_url']) : '' // Sanitiza URL
            ];
        }
    }
    // Ordena os pacotes pelo valor (amount) em ordem crescente
    usort($new_input, function($a, $b) { return $a['amount'] <=> $b['amount']; });
    return $new_input;
}

/**
 * Renderiza o campo dinâmico para gerir os pacotes de pagamento (valor + imagem).
 * Inclui botões para adicionar/remover pacotes e uploader de media.
 */
function imz_render_payment_packages_field() {
    wp_enqueue_media(); // Necessário para o uploader de media do WordPress
    $default_packages = [['amount' => 25, 'image_url' => ''], ['amount' => 50, 'image_url' => ''], ['amount' => 100, 'image_url' => '']]; // Padrão inicial
    $packages = get_option('imz_payment_packages', $default_packages); // Obtém os pacotes guardados ou usa o padrão
    ?>
    <div id="packages-wrapper">
        <p class="description">Defina os valores (em MT) e associe uma imagem de nota para cada um.</p>
        <div id="packages-container">
            <?php if (!empty($packages)) : foreach ($packages as $index => $package) : ?>
                <div class="package-row" style="margin-bottom: 15px; display: flex; align-items: center; gap: 10px;">
                    <input type="number" name="imz_payment_packages[<?php echo $index; ?>][amount]" value="<?php echo esc_attr($package['amount']); ?>" class="regular-text" placeholder="Valor em MT" required>
                    <input type="hidden" name="imz_payment_packages[<?php echo $index; ?>][image_url]" id="package_image_url_<?php echo $index; ?>" value="<?php echo esc_attr($package['image_url']); ?>">
                    <img src="<?php echo esc_attr($package['image_url']); ?>" id="package_image_preview_<?php echo $index; ?>" style="max-width: 100px; height: auto; border: 1px solid #ddd; background: #f0f0f1; <?php echo empty($package['image_url']) ? 'display:none;' : ''; ?>">
                    <button type="button" class="button upload-package-image" data-index="<?php echo $index; ?>">Carregar Imagem</button>
                    <button type="button" class="button button-secondary remove-package">Remover</button>
                </div>
            <?php endforeach; endif; ?>
        </div>
        <button type="button" class="button" id="add-package" style="margin-top: 10px;">Adicionar Pacote</button>
    </div>
    <script>
    // JavaScript para gerir a adição/remoção de pacotes e o uploader de imagem
    document.addEventListener('DOMContentLoaded', function() {
        const wrapper = document.getElementById('packages-wrapper');
        if (!wrapper) return; // Garante que o script só corre se o elemento existir

        const container = wrapper.querySelector('#packages-container');
        const addBtn = wrapper.querySelector('#add-package');

        container.addEventListener('click', function(e) {
            // Lógica do uploader de media
            if (e.target.classList.contains('upload-package-image')) {
                e.preventDefault();
                const index = e.target.dataset.index;
                const mediaUploader = wp.media({
                    title: 'Escolha uma imagem para o pacote',
                    button: { text: 'Usar esta imagem' },
                    multiple: false
                });
                mediaUploader.on('select', function() {
                    const attachment = mediaUploader.state().get('selection').first().toJSON();
                    document.getElementById('package_image_url_' + index).value = attachment.url;
                    const preview = document.getElementById('package_image_preview_' + index);
                    preview.src = attachment.url;
                    preview.style.display = 'block';
                });
                mediaUploader.open();
            }
            // Lógica para remover um pacote
            if (e.target.classList.contains('remove-package')) {
                e.target.closest('.package-row').remove();
            }
        });

        // Lógica para adicionar um novo pacote
        addBtn.addEventListener('click', function() {
            const index = container.children.length; // Novo índice
            const newRow = document.createElement('div');
            newRow.className = 'package-row';
            newRow.style.cssText = 'margin-bottom: 15px; display: flex; align-items: center; gap: 10px;';
            newRow.innerHTML = `
                <input type="number" name="imz_payment_packages[${index}][amount]" class="regular-text" placeholder="Valor em MT" required>
                <input type="hidden" name="imz_payment_packages[${index}][image_url]" id="package_image_url_${index}">
                <img src="" id="package_image_preview_${index}" style="max-width: 100px; height: auto; border: 1px solid #ddd; background: #f0f0f1; display:none;">
                <button type="button" class="button upload-package-image" data-index="${index}">Carregar Imagem</button>
                <button type="button" class="button button-secondary remove-package">Remover</button>
            `;
            container.appendChild(newRow);
        });
    });
    </script>
    <?php
}

/**
 * Renderiza o campo dinâmico para gerir as qualidades de áudio predefinidas.
 * Inclui botões para adicionar/remover qualidades.
 */
function imz_render_qualities_field() {
    $qualities = get_option('imz_predefined_qualities', ['320kbps AAC M4A', '256kbps MP3', '128kbps MP3']); // Padrão inicial
    ?>
    <div id="qualities-admin-wrapper">
        <p class="description">Adicione ou remova as opções de qualidade que aparecerão na lista de seleção ao editar um post de música.</p>
        <div id="qualities-admin-container">
            <?php if (!empty($qualities)): foreach ($qualities as $index => $quality): ?>
                <div class="quality-admin-row">
                    <input type="text" name="imz_predefined_qualities[<?php echo $index; ?>]" value="<?php echo esc_attr($quality); ?>" placeholder="Ex: 320kbps AAC M4A" class="regular-text">
                    <button type="button" class="button button-link-delete remove-quality-admin-row">Remover</button>
                </div>
            <?php endforeach; endif; ?>
        </div>
        <button type="button" id="add_quality_admin_row" class="button button-secondary" style="margin-top: 15px;">Adicionar Nova Qualidade</button>
    </div>
    <style>.quality-admin-row { display: flex; gap: 15px; align-items: center; margin-bottom: 10px; }</style>
    <script>
        // JavaScript para gerir adição/remoção de qualidades
        jQuery(document).ready(function($) {
            const wrapper = $('#qualities-admin-wrapper');
             if (!wrapper.length) return; // Garante que só corre se o elemento existir

            const container = wrapper.find('#qualities-admin-container');
            wrapper.find('#add_quality_admin_row').on('click', function() {
                const index = container.find('.quality-admin-row').length;
                const newRow = `<div class="quality-admin-row"><input type="text" name="imz_predefined_qualities[${index}]" placeholder="Ex: 320kbps AAC M4A" class="regular-text"><button type="button" class="button button-link-delete remove-quality-admin-row">Remover</button></div>`;
                container.append(newRow);
            });
            container.on('click', '.remove-quality-admin-row', function() { $(this).closest('.quality-admin-row').remove(); });
        });
    </script>
    <?php
}


/**
 * Regista todos os settings, secções e campos para todas as abas da página de configurações.
 * Hooked no 'admin_init'.
 */
add_action('admin_init', function() {
    // === GRUPO E CAMPOS: Aba "Geral & Pagamentos" ===
    register_setting('imz_config_group_geral', 'imz_cor_padrao'); // Cor base do selo
    register_setting('imz_config_group_geral', 'imz_cor_1000'); // Cor selo >= 1000MT
    register_setting('imz_config_group_geral', 'imz_cor_3000'); // Cor selo >= 3000MT
    register_setting('imz_config_group_geral', 'imz_mpesa_number'); // Nº M-Pesa (manual)
    register_setting('imz_config_group_geral', 'imz_emola_number'); // Nº e-Mola (manual)
    register_setting('imz_config_group_geral', 'imz_payment_packages', 'imz_sanitize_payment_packages'); // Pacotes de valor
    register_setting('imz_config_group_geral', 'imz_boost_price_per_day'); // Preço por dia de impulsionamento
    register_setting('imz_config_group_geral', 'imz_digital_signature_url'); // URL da assinatura digital

    // --- Secções da Aba "Geral & Pagamentos" ---
    add_settings_section('imz_section_main', 'Cores de Destaque (Selos)', null, 'imz_config_seccao_geral');
    add_settings_field('imz_cor_padrao', 'Cor padrão (menos de 1000MT)', function() { $val = get_option('imz_cor_padrao', '#2563eb'); echo "<input type='text' name='imz_cor_padrao' value='{$val}' class='regular-text'>"; }, 'imz_config_seccao_geral', 'imz_section_main');
    add_settings_field('imz_cor_1000', 'Cor ao atingir 1000MT', function() { $val = get_option('imz_cor_1000', '#22c55e'); echo "<input type='text' name='imz_cor_1000' value='{$val}' class='regular-text'>"; }, 'imz_config_seccao_geral', 'imz_section_main');
    add_settings_field('imz_cor_3000', 'Cor ao atingir 3000MT', function() { $val = get_option('imz_cor_3000', '#facc15'); echo "<input type='text' name='imz_cor_3000' value='{$val}' class='regular-text'>"; }, 'imz_config_seccao_geral', 'imz_section_main');

    add_settings_section('imz_section_payment', 'Dados de Pagamento (Manual)', function() { echo '<p>Estes números são mostrados quando o pagamento automático via API M-Pesa está desativado.</p>'; }, 'imz_config_seccao_geral');
    add_settings_field('imz_mpesa_number', 'Número M-Pesa', function() { $val = get_option('imz_mpesa_number', '84 123 4567'); echo "<input type='text' name='imz_mpesa_number' value='{$val}' class='regular-text' placeholder='Ex: 84 000 0000'>"; }, 'imz_config_seccao_geral', 'imz_section_payment');
    add_settings_field('imz_emola_number', 'Número e-Mola', function() { $val = get_option('imz_emola_number', '86 765 4321'); echo "<input type='text' name='imz_emola_number' value='{$val}' class='regular-text' placeholder='Ex: 86 000 0000'>"; }, 'imz_config_seccao_geral', 'imz_section_payment');

    add_settings_section('imz_section_packages', 'Pacotes de Impulsionamento', null, 'imz_config_seccao_geral');
    add_settings_field('imz_payment_packages_field', 'Valores Disponíveis (Legado)', 'imz_render_payment_packages_field', 'imz_config_seccao_geral', 'imz_section_packages');
    add_settings_field('imz_boost_price_per_day', 'Preço por Dia de Destaque (MT)', function() {
        $val = get_option('imz_boost_price_per_day', 50);
        echo "<input type='number' name='imz_boost_price_per_day' value='" . esc_attr($val) . "' min='1' style='width:100px;'> MT/dia";
        echo "<p class='description'>O preço por dia de impulsionamento. Ex: 50 MT/dia → 24h = 50 MT, 3 dias = 150 MT, 7 dias = 350 MT.</p>";
    }, 'imz_config_seccao_geral', 'imz_section_packages');

    // Secção e Campo para Assinatura Digital
    add_settings_section('imz_section_signature', 'Assinatura Digital (Documentos)', null, 'imz_config_seccao_geral');
    add_settings_field('imz_digital_signature_url', 'Imagem da Assinatura', function() {
        wp_enqueue_media(); // Necessário para o uploader
        $signature_url = get_option('imz_digital_signature_url', '');
        ?>
        <div>
            <input type="hidden" name="imz_digital_signature_url" id="imz_digital_signature_url" value="<?php echo esc_url($signature_url); ?>">
            <img id="imz_signature_preview" src="<?php echo esc_url($signature_url); ?>" style="max-width: 200px; height: auto; border: 1px solid #ddd; background: #f0f0f1; <?php echo empty($signature_url) ? 'display:none;' : ''; ?>">
            <button type="button" class="button" id="upload_signature_button">Carregar Assinatura</button>
            <p class="description">Faça o upload de uma imagem (PNG com fundo transparente é recomendado).</p>
        </div>
        <script>
            // JS para o uploader da assinatura
            jQuery(document).ready(function($) {
                $('#upload_signature_button').click(function(e) {
                    e.preventDefault();
                    var mediaUploader = wp.media({
                        title: 'Escolha a imagem da assinatura',
                        button: { text: 'Usar esta imagem' },
                        multiple: false
                    });
                    mediaUploader.on('select', function() {
                        var attachment = mediaUploader.state().get('selection').first().toJSON();
                        $('#imz_digital_signature_url').val(attachment.url);
                        $('#imz_signature_preview').attr('src', attachment.url).show();
                    });
                    mediaUploader.open();
                });
            });
        </script>
        <?php
    }, 'imz_config_seccao_geral', 'imz_section_signature');


    // === GRUPO E CAMPOS: Aba "Artista PRO" ===
    register_setting('imz_config_group_pro', 'imz_pro_subscription_price'); // Preço da subscrição

    // --- Secções da Aba "Artista PRO" ---
    add_settings_section('imz_section_pro_subscription', 'Configurações do Artista PRO', null, 'imz_config_seccao_pro');
    add_settings_field('imz_pro_subscription_price', 'Preço da Subscrição PRO (MT)', function() { $val = get_option('imz_pro_subscription_price', '1500'); echo "<input type='number' name='imz_pro_subscription_price' value='{$val}' class='regular-text'><p class='description'>Defina o custo mensal para um artista se tornar PRO.</p>"; }, 'imz_config_seccao_pro', 'imz_section_pro_subscription');


    // === GRUPO E CAMPOS: Aba "Downloads" ===
    register_setting('imz_config_group_downloads', 'imz_report_reasons'); // Motivos de reporte
    register_setting('imz_config_group_downloads', 'imz_download_limit'); // Limite diário global
    register_setting('imz_config_group_downloads', 'imz_blocked_countries'); // Países bloqueados global
    register_setting('imz_config_group_downloads', 'imz_limit_reached_message'); // Mensagem limite atingido
    register_setting('imz_config_group_downloads', 'imz_download_terms'); // Termos de uso download
    register_setting('imz_config_group_downloads', 'imz_download_restriction_level'); // Nível de restrição
    register_setting('imz_config_group_downloads', 'imz_enable_download_captcha'); // Ativar captcha download
    register_setting('imz_config_group_downloads', 'imz_download_copyright_notice'); // Aviso copyright
    register_setting('imz_config_group_downloads', 'imz_download_wait_seconds'); // Segundos de espera
    register_setting('imz_config_group_downloads', 'imz_predefined_qualities'); // Qualidades predefinidas

    // --- Secções da Aba "Downloads" ---
    add_settings_section('imz_section_downloads_main', 'Configurações do Gestor de Downloads', null, 'imz_config_seccao_downloads');
    add_settings_field('imz_download_limit', 'Limite Diário de Downloads (Global)', function() { $val = get_option('imz_download_limit', 1000); echo "<input type='number' min='0' step='1' name='imz_download_limit' value='" . esc_attr($val) . "' class='regular-text'><p class='description'>Limite padrão por música por dia (0 para ilimitado). Pode ser sobreposto individualmente por Artistas PRO.</p>"; }, 'imz_config_seccao_downloads', 'imz_section_downloads_main');
    add_settings_field('imz_blocked_countries', 'Países Bloqueados (Global)', function() { $val = get_option('imz_blocked_countries', ''); echo "<textarea name='imz_blocked_countries' rows='3' class='large-text' placeholder='Ex: US, GB, DE'>{$val}</textarea><p class='description'>Códigos ISO 3166-1 alfa-2 separados por vírgula. Bloqueio padrão, pode ser sobreposto individualmente por Artistas PRO.</p>"; }, 'imz_config_seccao_downloads', 'imz_section_downloads_main');
    add_settings_field('imz_limit_reached_message', 'Mensagem de Limite Atingido', function() { $val = get_option('imz_limit_reached_message', 'Esta música atingiu o limite de downloads por hoje. <br>Compre em lojas oficiais ou oiça no YouTube ou outras plataformas digitais.'); wp_editor($val, 'imz_limit_reached_message', ['textarea_name' => 'imz_limit_reached_message', 'media_buttons' => false, 'textarea_rows' => 5]); echo '<p class="description">Mensagem mostrada quando o limite diário/total é atingido.</p>'; }, 'imz_config_seccao_downloads', 'imz_section_downloads_main');
    add_settings_field('imz_download_terms', 'Termos de Uso para Download', function() { $val = get_option('imz_download_terms', 'Ao baixar esta música, concorda em não a redistribuir ou usar para fins comerciais. Este ficheiro destina-se apenas para uso pessoal e promocional.'); wp_editor($val, 'imz_download_terms', ['textarea_name' => 'imz_download_terms', 'media_buttons' => false, 'textarea_rows' => 5]); echo '<p class="description">Este texto aparecerá antes do download final.</p>'; }, 'imz_config_seccao_downloads', 'imz_section_downloads_main');
    add_settings_field('imz_download_restriction_level', 'Nível de Restrição de Download (1x por pessoa)', function() { $option = get_option('imz_download_restriction_level', 'ip_only'); echo '<select name="imz_download_restriction_level"><option value="none"' . selected($option, 'none', false) . '>Nenhuma (Permitir múltiplos downloads)</option><option value="ip_only"' . selected($option, 'ip_only', false) . '>Apenas por IP (Básico)</option><option value="ip_browser"' . selected($option, 'ip_browser', false) . '>Por IP + Navegador (Recomendado)</option></select>'; echo '<p class="description">Controla como o sistema identifica um utilizador para limitar a 1 download gratuito por música.</p>'; }, 'imz_config_seccao_downloads', 'imz_section_downloads_main');
    add_settings_field('imz_enable_download_captcha', 'Ativar Defesa Anti-Bot no Download', function() { $option = get_option('imz_enable_download_captcha'); echo '<label><input type="checkbox" name="imz_enable_download_captcha" value="1"' . checked(1, $option, false) . '> Sim, adicionar verificação reCAPTCHA antes do download gratuito.</label><p class="description">Requer configuração do reCAPTCHA na aba "Integrações".</p>'; }, 'imz_config_seccao_downloads', 'imz_section_downloads_main');
    add_settings_field('imz_download_copyright_notice', 'Aviso de Direitos Autorais (Caixa Download)', function() { $default_text = 'Os direitos autorais desta obra pertencem ao artista e/ou ao seu representante. A 1MusicMoz não se responsabiliza pelo conteúdo disponibilizado.'; $val = get_option('imz_download_copyright_notice', $default_text); echo "<textarea name='imz_download_copyright_notice' rows='3' class='large-text'>{$val}</textarea><p class='description'>Este aviso aparecerá em todas as caixas de download.</p>"; }, 'imz_config_seccao_downloads', 'imz_section_downloads_main');

    add_settings_field('imz_download_wait_seconds', 'Tempo de Espera (segundos)', function() { $val = get_option('imz_download_wait_seconds', 10); echo "<input type='number' name='imz_download_wait_seconds' value='{$val}' min='5' max='60' style='width:80px;'> <p class='description'>Tempo de espera antes do download ficar disponível. Mínimo 5 segundos. Útil para monetização com anúncios.</p>"; }, 'imz_config_seccao_downloads', 'imz_section_downloads_main');

    add_settings_section('imz_section_reports', 'Configurações de Reporte de Problemas', null, 'imz_config_seccao_downloads');
    add_settings_field('imz_report_reasons', 'Motivos de Reporte', function() { $default_reasons = "Link de download quebrado\nÁudio com má qualidade\nInformações incorretas (artista, título, etc.)\nConteúdo ofensivo\nOutro (descreva abaixo)"; $val = get_option('imz_report_reasons', $default_reasons); echo "<textarea name='imz_report_reasons' rows='5' class='large-text'>{$val}</textarea><p class='description'>Insira os motivos de reporte mais comuns, um por linha.</p>"; }, 'imz_config_seccao_downloads', 'imz_section_reports');

    add_settings_section('imz_section_qualities', 'Gerir Qualidades de Áudio (Download Gratuito)', null, 'imz_config_seccao_downloads');
    add_settings_field('imz_predefined_qualities', 'Opções de Qualidade Disponíveis', 'imz_render_qualities_field', 'imz_config_seccao_downloads', 'imz_section_qualities'); // Usa a função de renderização


    // === GRUPO E CAMPOS: Aba "Integrações" ===
    register_setting('imz_config_group_integracoes', 'imz_enable_mpesa_api'); // Ativar M-Pesa API
    register_setting('imz_config_group_integracoes', 'imz_mpesa_api_mode'); // Modo M-Pesa (sandbox/production)
    register_setting('imz_config_group_integracoes', 'imz_mpesa_api_key'); // M-Pesa API Key
    register_setting('imz_config_group_integracoes', 'imz_mpesa_public_key'); // M-Pesa Public Key
    register_setting('imz_config_group_integracoes', 'imz_mpesa_till_number'); // M-Pesa Till Number
    register_setting('imz_config_group_integracoes', 'imz_youtube_api_key'); // YouTube API Key
    register_setting('imz_config_group_integracoes', 'imz_recaptcha_site_key'); // reCAPTCHA Site Key
    register_setting('imz_config_group_integracoes', 'imz_recaptcha_secret_key'); // reCAPTCHA Secret Key

    // --- Secções da Aba "Integrações" ---
    add_settings_section('imz_section_mpesa_api', 'Pagamento Automático via API M-Pesa', null, 'imz_config_seccao_integracoes');
    add_settings_field('imz_enable_mpesa_api', 'Ativar API M-Pesa', function() { $option = get_option('imz_enable_mpesa_api'); echo '<label><input type="checkbox" id="imz_enable_mpesa_api" name="imz_enable_mpesa_api" value="1"' . checked(1, $option, false) . '> Sim, ativar o pagamento automático via M-Pesa</label><p class="description">Ao ativar, os utilizadores pagarão diretamente através de um pedido no telemóvel para impulsionamentos.</p>'; }, 'imz_config_seccao_integracoes', 'imz_section_mpesa_api');
    add_settings_field('imz_mpesa_api_mode', 'Modo de Operação', function() { $option = get_option('imz_mpesa_api_mode', 'sandbox'); echo "<div class='api-field-wrapper'><select name='imz_mpesa_api_mode'><option value='sandbox'" . selected($option, 'sandbox', false) . ">Sandbox (Teste)</option><option value='production'" . selected($option, 'production', false) . ">Produção (Real)</option></select><p class='description'>Use <strong>Sandbox</strong> para testar. Mude para <strong>Produção</strong> para receber pagamentos reais.</p></div>"; }, 'imz_config_seccao_integracoes', 'imz_section_mpesa_api');
    add_settings_field('imz_mpesa_api_key', 'API Key', function() { $val = get_option('imz_mpesa_api_key', ''); echo "<div class='api-field-wrapper'><input type='text' name='imz_mpesa_api_key' value='" . esc_attr($val) . "' class='regular-text' placeholder='Cole a sua API Key aqui'></div>"; }, 'imz_config_seccao_integracoes', 'imz_section_mpesa_api');
    add_settings_field('imz_mpesa_public_key', 'Public Key', function() { $val = get_option('imz_mpesa_public_key', ''); echo "<div class='api-field-wrapper'><textarea name='imz_mpesa_public_key' rows='5' class='large-text' placeholder='-----BEGIN PUBLIC KEY-----...-----END PUBLIC KEY-----'>{$val}</textarea></div>"; }, 'imz_config_seccao_integracoes', 'imz_section_mpesa_api');
    add_settings_field('imz_mpesa_till_number', 'Till Number (ou Shortcode)', function() { $val = get_option('imz_mpesa_till_number', ''); echo "<div class='api-field-wrapper'><input type='text' name='imz_mpesa_till_number' value='" . esc_attr($val) . "' class='regular-text' placeholder='O seu número de comerciante'></div>"; }, 'imz_config_seccao_integracoes', 'imz_section_mpesa_api');

    add_settings_section('imz_section_youtube_api', 'Integração com YouTube', function() { echo '<p>Para exibir a contagem de visualizações nos selos, precisa de uma Chave da API de Dados do YouTube. Pode obter uma no <a href="https://console.developers.google.com/" target="_blank">Google Developers Console</a>.</p>'; }, 'imz_config_seccao_integracoes');
    add_settings_field('imz_youtube_api_key', 'YouTube Data API Key', function() { $val = get_option('imz_youtube_api_key', ''); echo "<input type='text' name='imz_youtube_api_key' value='" . esc_attr($val) . "' class='regular-text' placeholder='Cole a sua chave da API aqui'>"; }, 'imz_config_seccao_integracoes', 'imz_section_youtube_api');

    // Secção e Campos para reCAPTCHA
    add_settings_section('imz_section_recaptcha', 'Google reCAPTCHA v2 ("Não sou um robô")', function() {
        echo '<p>Proteja os formulários de reporte e download (se ativo) contra bots. Obtenha as suas chaves no <a href="https://www.google.com/recaptcha/admin/" target="_blank">Google reCAPTCHA Admin Console</a> (selecione reCAPTCHA v2 -> "Não sou um robô" Checkbox).</p>';
    }, 'imz_config_seccao_integracoes');

    add_settings_field('imz_recaptcha_site_key', 'reCAPTCHA Site Key', function() {
        $val = get_option('imz_recaptcha_site_key', '');
        echo "<input type='text' name='imz_recaptcha_site_key' value='" . esc_attr($val) . "' class='regular-text' placeholder='Cole a sua Site Key aqui'>";
         echo '<p class="description">Esta chave é pública e usada no HTML dos formulários.</p>';
    }, 'imz_config_seccao_integracoes', 'imz_section_recaptcha');

    add_settings_field('imz_recaptcha_secret_key', 'reCAPTCHA Secret Key', function() {
        $val = get_option('imz_recaptcha_secret_key', '');
        echo "<input type='text' name='imz_recaptcha_secret_key' value='" . esc_attr($val) . "' class='regular-text' placeholder='Cole a sua Secret Key aqui'>";
         echo '<p class="description">Esta chave é privada, usada na verificação do lado do servidor.</p>';
    }, 'imz_config_seccao_integracoes', 'imz_section_recaptcha');


    // Script para mostrar/esconder os campos da API M-Pesa condicionalmente
    add_action('admin_footer', function() {
        // Garante que o script só é adicionado na página de configurações do plugin
        $screen = get_current_screen();
        if ($screen && $screen->id === '1mz-admin_page_impulsionamento_config') {
        ?>
        <script>
            jQuery(document).ready(function($) {
                function toggleApiFields() {
                    var isChecked = $('#imz_enable_mpesa_api').is(':checked');
                    // Encontra os <tr> que contêm os campos da API M-Pesa e mostra/esconde
                    $('input[name="imz_mpesa_api_mode"]').closest('tr').toggle(isChecked);
                    $('input[name="imz_mpesa_api_key"]').closest('tr').toggle(isChecked);
                    $('textarea[name="imz_mpesa_public_key"]').closest('tr').toggle(isChecked);
                    $('input[name="imz_mpesa_till_number"]').closest('tr').toggle(isChecked);
                }
                // Executa a função no carregamento da página se o checkbox existir
                if ($('#imz_enable_mpesa_api').length) {
                    toggleApiFields();
                    // Adiciona o listener para mudanças
                    $('#imz_enable_mpesa_api').on('change', toggleApiFields);
                }
            });
        </script>
        <?php
        } // Fim if ($screen)
    }); // Fim add_action('admin_footer', ...)

}); // Fim do add_action('admin_init', ...)

?>