<?php

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

// --- FUNÇÃO AJAX PARA O UPLOAD DO COMPROVATIVO (MÉTODO MANUAL) ---
function imz_ajax_upload_boost_receipt() {
    check_ajax_referer('imz_upload_boost_receipt_nonce', 'nonce');
    if (empty($_FILES['boost_receipt'])) {
        wp_send_json_error(['message' => 'Nenhum ficheiro recebido.']);
    }

    $file = $_FILES['boost_receipt'];
    $max_size = 2 * 1024 * 1024; // 2MB
    $allowed_types = ['image/jpeg', 'image/png', 'image/gif'];

    if ($file['size'] > $max_size) {
        wp_send_json_error(['message' => 'Ficheiro demasiado grande (Máx 2MB).']);
    }
    if (!in_array($file['type'], $allowed_types)) {
        wp_send_json_error(['message' => 'Tipo de ficheiro inválido. Apenas JPG, PNG e GIF são permitidos.']);
    }

    require_once(ABSPATH . 'wp-admin/includes/image.php');
    require_once(ABSPATH . 'wp-admin/includes/file.php');
    require_once(ABSPATH . 'wp-admin/includes/media.php');
    
    $attachment_id = media_handle_upload('boost_receipt', 0);

    if (is_wp_error($attachment_id)) {
        wp_send_json_error(['message' => $attachment_id->get_error_message()]);
    } else {
        wp_send_json_success(['attachment_id' => $attachment_id]);
    }
}




// --- FUNÇÃO AJAX PARA INICIAR O PAGAMENTO M-PESA (MÉTODO AUTOMÁTICO) ---
function imz_ajax_initiate_mpesa_payment() {
    check_ajax_referer('imz_initiate_payment_nonce', 'nonce');

    if (!get_option('imz_enable_mpesa_api')) {
        wp_send_json_error(['message' => 'API M-Pesa não está ativa.']);
    }

    $amount = isset($_POST['amount']) ? absint($_POST['amount']) : 0;
    $phone = isset($_POST['phone']) ? sanitize_text_field($_POST['phone']) : '';
    $post_id = isset($_POST['post_id']) ? absint($_POST['post_id']) : 0;

    if ($amount <= 0 || strlen($phone) !== 9 || $post_id === 0) {
        wp_send_json_error(['message' => 'Dados inválidos. Por favor, preencha todos os campos corretamente.']);
    }

    $customer_msisdn = '258' . $phone;
    $transaction_ref = 'IMZ' . time() . rand(10, 99);
    $third_party_ref = 'BOOST' . $post_id . '_' . time();

    $mpesa_api = new IMZ_Mpesa_API();
    $result = $mpesa_api->initiate_c2b_payment($amount, $customer_msisdn, $transaction_ref, $third_party_ref);

    if (defined('WP_DEBUG') && WP_DEBUG) {
        error_log('RESPOSTA DA API M-PESA: ' . print_r($result, true));
    }

    if (is_null($result) || !is_array($result)) {
        wp_send_json_error(['message' => 'Falha na M-Pesa: Resposta inválida do servidor.']);
        return;
    }

    if (isset($result['error'])) {
        wp_send_json_error(['message' => 'Falha na M-Pesa: ' . $result['error']]);
        return;
    }
    
    if (isset($result['output_ResponseCode']) && $result['output_ResponseCode'] === 'INS-0') {
        wp_send_json_success(['message' => 'Pedido enviado! Por favor, insira o seu PIN no telemóvel para confirmar o pagamento.']);
    } else {
        $error_message = $result['output_ResponseDesc'] ?? 'Ocorreu um erro desconhecido. Verifique as suas credenciais e o modo de operação (Sandbox/Produção).';
        wp_send_json_error(['message' => 'Falha na M-Pesa: ' . $error_message]);
    }
}




add_action('wp_ajax_imz_upload_boost_receipt', 'imz_ajax_upload_boost_receipt');

// --- SHORTCODES ---

function imz_impulsionar_botao_shortcode($atts) {
    // Public boosting was retired. Campaigns are created inside Musicas & Ganhos.
    return '';
}
add_shortcode('botao_impulsionar', 'imz_impulsionar_botao_shortcode');

function imz_render_impulsionar_form() {
    $logged_in = function_exists('imz_rmbz_is_artist_logged_in') ? imz_rmbz_is_artist_logged_in() : is_user_logged_in();
    $url = function_exists('imz_rmbz_account_url')
        ? imz_rmbz_account_url('musicas')
        : add_query_arg('sect', 'musicas', home_url('/minha-conta/'));
    $title = $logged_in ? 'Impulsionamento disponível no teu painel' : 'Impulsionamento reservado aos artistas';
    $description = $logged_in
        ? 'Escolhe a música, a duração e confirma o pagamento com a carteira 1MZ em Músicas & Ganhos.'
        : 'Entra na tua conta 1MZ For Artists para gerir campanhas das tuas próprias músicas.';
    $button = $logged_in ? 'Abrir Músicas & Ganhos' : 'Entrar na conta';
    return '<div class="imz-form-container imz-boost-private"><h2>' . esc_html($title) . '</h2><p class="imz-form-description">' . esc_html($description) . '</p><p><a class="imz-botao-principal" href="' . esc_url($url) . '">' . esc_html($button) . '</a></p></div>';
}
add_shortcode('formulario_impulsionar', 'imz_render_impulsionar_form');
function imz_redirect_legacy_public_boost_page() {
    if (is_admin() || wp_doing_ajax() || !is_singular('page')) return;
    global $post;
    if (!$post || !has_shortcode((string) $post->post_content, 'formulario_impulsionar')) return;
    $url = function_exists('imz_rmbz_account_url')
        ? imz_rmbz_account_url('musicas')
        : add_query_arg('sect', 'musicas', home_url('/minha-conta/'));
    wp_safe_redirect($url, 302, '1MZ For Artists');
    exit;
}
add_action('template_redirect', 'imz_redirect_legacy_public_boost_page');

function imz_render_impulsionar_form_content($post_id, $post_title) {
    $is_api_enabled = get_option('imz_enable_mpesa_api');
    $mpesa_number = get_option('imz_mpesa_number', '861640807');
    $emola_number = get_option('imz_emola_number', '861640807');
    $preco_por_dia = (float) get_option('imz_boost_price_per_day', 50);

    // Pacotes de duração
    $duracoes = [
        ['dias' => 1,  'label' => '24 Horas',  'desc' => 'Ideal para lançamentos rápidos'],
        ['dias' => 2,  'label' => '2 Dias',     'desc' => 'Mais tempo de exposição'],
        ['dias' => 3,  'label' => '3 Dias',     'desc' => 'Recomendado para singles'],
        ['dias' => 7,  'label' => '7 Dias',     'desc' => 'Máxima visibilidade'],
    ];

    ob_start(); ?>
    <style>
    .imz-boost-page { max-width: 600px; margin: 0 auto; }
    .imz-boost-page h2 { text-align: center; margin-bottom: 6px; }
    .imz-boost-page .imz-form-description { text-align: center; margin-bottom: 28px; }

    .imz-boost-duration-grid { display: grid; grid-template-columns: repeat(2, 1fr); gap: 12px; margin-bottom: 24px; }
    .imz-boost-duration-card {
        position: relative;
        background: var(--imz-color-background, #141414);
        border: 2px solid var(--imz-border-color, #2a2a2a);
        border-radius: 14px;
        padding: 18px 16px;
        cursor: pointer;
        transition: border-color 0.2s, box-shadow 0.2s, transform 0.15s;
        text-align: center;
    }
    .imz-boost-duration-card:hover { border-color: #f59e0b; transform: translateY(-2px); }
    .imz-boost-duration-card.selected {
        border-color: #f59e0b;
        box-shadow: 0 0 0 2px rgba(245,158,11,0.2), 0 6px 20px rgba(245,158,11,0.1);
    }
    .imz-boost-duration-card.selected::after {
        content: '✓';
        position: absolute;
        top: 8px;
        right: 10px;
        width: 20px;
        height: 20px;
        background: #f59e0b;
        color: #fff;
        border-radius: 50%;
        display: flex;
        align-items: center;
        justify-content: center;
        font-size: 11px;
        font-weight: 700;
    }
    .imz-boost-duration-card input { display: none; }
    .imz-boost-dur-label { font-size: 16px; font-weight: 700; color: var(--imz-color-text, #fff); margin: 0 0 4px; }
    .imz-boost-dur-price { font-size: 22px; font-weight: 800; color: #f59e0b; margin: 4px 0; }
    .imz-boost-dur-price span { font-size: 12px; font-weight: 400; color: var(--imz-color-text-light, #888); }
    .imz-boost-dur-desc { font-size: 11px; color: var(--imz-color-text-light, #888); margin: 0; }

    .imz-boost-summary {
        background: linear-gradient(135deg, rgba(245,158,11,0.06), rgba(245,158,11,0.02));
        border: 1px solid rgba(245,158,11,0.15);
        border-radius: 12px;
        padding: 16px 20px;
        margin-bottom: 24px;
        text-align: center;
    }
    .imz-boost-summary p { margin: 0; font-size: 14px; color: var(--imz-color-text-light, #888); }
    .imz-boost-summary .imz-boost-total { font-size: 28px; font-weight: 800; color: #f59e0b; display: block; margin-top: 4px; }

    @media (max-width: 480px) { .imz-boost-duration-grid { grid-template-columns: 1fr; } }
    </style>

    <div class="imz-form-container imz-boost-page">
        <h2>🔊 Impulsionar: <?php echo esc_html($post_title); ?></h2>
        <p class="imz-form-description">A sua música aparecerá como <strong>Música Destacada</strong> nos anúncios de toda a plataforma durante o período escolhido.</p>

        <form method="post" class="imz-boost-form" id="imz-boost-form" enctype="multipart/form-data">
            <?php wp_nonce_field('imz_fazer_impulsionamento_action', 'imz_nonce_field'); ?>
            <input type="hidden" name="post_id" value="<?php echo esc_attr($post_id); ?>">
            <input type="hidden" name="imz_timestamp" value="<?php echo time(); ?>">
            <p class="imz-honeypot-field"><label>Deixe este campo vazio</label><input type="text" name="imz_extra_field" value=""></p>
            
            <!-- Duração -->
            <div class="imz-form-group">
                <label style="font-weight:600; margin-bottom:12px; display:block;">Escolha a duração do destaque:</label>
                <div class="imz-boost-duration-grid">
                    <?php $first = true; foreach ($duracoes as $dur) :
                        $total = $preco_por_dia * $dur['dias'];
                    ?>
                    <label class="imz-boost-duration-card<?php echo $first ? ' selected' : ''; ?>" data-price="<?php echo $total; ?>">
                        <input type="radio" name="boost_duracao" value="<?php echo $dur['dias']; ?>" required <?php echo $first ? 'checked' : ''; ?>>
                        <p class="imz-boost-dur-label"><?php echo $dur['label']; ?></p>
                        <p class="imz-boost-dur-price"><?php echo number_format($total); ?> MT</p>
                        <p class="imz-boost-dur-desc"><?php echo $dur['desc']; ?></p>
                    </label>
                    <?php $first = false; endforeach; ?>
                </div>
            </div>

            <!-- Resumo do valor -->
            <div class="imz-boost-summary">
                <p>Valor a pagar:</p>
                <span class="imz-boost-total" id="imz-boost-total-display"><?php echo number_format($preco_por_dia); ?> MT</span>
            </div>

            <div class="imz-form-group"><label for="nome">Seu nome (para o Top Impulsionadores):</label><input type="text" id="nome" name="nome" maxlength="20"></div>
            <div class="imz-form-group"><label for="telefone_pagador">Seu número M-Pesa (9 dígitos):</label><input type="tel" id="telefone_pagador" name="telefone_pagador" required maxlength="9" pattern="[0-9]{9}" title="O número deve ter exatamente 9 dígitos."></div>

            <?php if (!$is_api_enabled) : ?>
                <div class="imz-form-group">
                    <label for="metodo_pagamento">Método de Pagamento:</label>
                    <select name="metodo_pagamento" id="metodo_pagamento" onchange="mostrarInstrucao()" required><option value="">-- Selecione --</option><option value="mpesa">M-Pesa</option><option value="emola">e-Mola</option></select>
                    <div id="instrucoes"></div>
                </div>
                <div class="imz-form-group">
                    <label>Comprovativo de pagamento (Imagem, max 2MB):</label>
                    <label for="comprovativo_upload" class="imz-file-uploader"><div class="imz-file-uploader-label">Clique para selecionar o Comprovativo<span>JPG, PNG ou GIF, até 2MB</span></div></label>
                    <input type="file" id="comprovativo_upload" accept=".jpg,.jpeg,.png,.gif">
                    <div class="imz-progress-container"><div class="imz-progress-bar"></div><span class="imz-progress-text">0%</span></div>
                    <p class="imz-file-notice"></p>
                </div>
                <input type="hidden" name="comprovativo_attachment_id" id="comprovativo_attachment_id" value="">
            <?php endif; ?>
            
            <?php if ($is_api_enabled) : ?><button type="submit" id="imz-api-submit-btn" class="imz-botao-principal">Pagar com M-Pesa</button><?php else : ?><button type="submit" name="imz_submit" class="imz-botao-principal">Enviar Pedido Manual</button><?php endif; ?>
            <div id="imz-form-messages" style="margin-top: 15px;"></div>
        </form>
    </div>
    <script>
    (function() {
        var cards = document.querySelectorAll('.imz-boost-duration-card');
        var totalDisplay = document.getElementById('imz-boost-total-display');
        cards.forEach(function(card) {
            card.addEventListener('click', function() {
                cards.forEach(function(c) { c.classList.remove('selected'); });
                this.classList.add('selected');
                this.querySelector('input[type="radio"]').checked = true;
                if (totalDisplay) {
                    var price = parseInt(this.getAttribute('data-price'));
                    totalDisplay.textContent = price.toLocaleString() + ' MT';
                }
            });
        });
        window.mostrarInstrucao = function() {
            var metodo = document.getElementById('metodo_pagamento').value;
            var div = document.getElementById('instrucoes');
            if(!div) return;
            var mpesaNum = '<?php echo esc_js($mpesa_number); ?>';
            var emolaNum = '<?php echo esc_js($emola_number); ?>';
            if (metodo === 'mpesa') { div.innerHTML = 'Envie para o número <strong>' + mpesaNum + '</strong> via M-Pesa e anexe o comprovativo.'; }
            else if (metodo === 'emola') { div.innerHTML = 'Transfira para <strong>' + emolaNum + '</strong> usando e-Mola e anexe o comprovativo.'; }
            else { div.innerHTML = ''; }
        };
    })();
    </script>
    <?php return ob_get_clean();
}

add_filter('the_content', function($content) {
    if (is_singular('post') && in_the_loop() && is_main_query()) {
        return $content . do_shortcode('[botao_impulsionar]');
    }
    return $content;
});

// --- SHORTCODE PARA A PÁGINA "TORNAR-SE PRO" ---

add_shortcode('pagina_ser_pro', 'imz_render_become_pro_page');
function imz_render_become_pro_page() {
    if (defined('RMBZ_ARTISTS_EMBEDDED')) {
        $logged_in = function_exists('imz_rmbz_is_artist_logged_in') && imz_rmbz_is_artist_logged_in();
        $account_url = function_exists('imz_rmbz_account_url') ? imz_rmbz_account_url($logged_in ? 'perfil' : 'inicio') : home_url('/minha-conta/');
        $artist_id = $logged_in && function_exists('imz_get_current_artist_user_id') ? imz_get_current_artist_user_id() : 0;
        $active = $artist_id && imz_is_artist_pro($artist_id);

        if ($active) {
            return '<div class="imz-message imz-message-success"><strong>Subscrição VIP 1MZ ativa.</strong><br>As funcionalidades profissionais do módulo Artists já estão disponíveis nesta conta.</div>';
        }

        return '<div class="imz-form-container imz-pro-upgrade-page"><h2>Planos VIP na tua conta 1MZ</h2><p class="imz-form-description">A subscrição deste painel é gerida diretamente pelo 1MZ For Artists. Não precisas criar outra conta nem enviar outro pedido aqui.</p><a class="imz-botao-principal" href="' . esc_url($account_url) . '">' . ($logged_in ? 'Ver planos VIP 1MZ' : 'Entrar na conta 1MZ') . '</a></div>';
    }

    if (!is_user_logged_in()) {
        return '<p>Você precisa de fazer login para poder fazer o upgrade para Artista PRO.</p>';
    }

    $artist_id = get_current_user_id();

    if (function_exists('imz_is_artist_pro') && imz_is_artist_pro($artist_id)) {
        return '<div class="imz-message imz-message-success"><strong>Parabéns! Ficamos feliz em ter você como nosso Artista PRO.</strong><br>Todas as funcionalidades exclusivas já estão ativas na sua conta.</div>';
    }

    $pending_request_query = new WP_Query([
        'post_type' => 'imz_subscription', 'author' => $artist_id, 'posts_per_page' => 1,
        'post_status' => 'publish', 'meta_query' => [['key' => 'status', 'value' => 'pendente']]
    ]);
    if ($pending_request_query->have_posts()) {
        return '<div class="imz-message imz-message-warning"><strong>Já tem um pedido pendente.</strong><br>A sua submissão para se tornar Artista PRO está a ser analisada pela nossa equipa. Receberá uma notificação em breve.</div>';
    }

    if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['imz_submit_pro_request'])) {
        if (!wp_verify_nonce($_POST['imz_pro_nonce_field'], 'imz_become_pro_action')) {
            wp_die('A verificação de segurança falhou.');
        }
        $attachment_id = isset($_POST['comprovativo_attachment_id']) ? absint($_POST['comprovativo_attachment_id']) : 0;
        if ($attachment_id === 0) {
             return '<p style="color: red; font-weight: bold;">É obrigatório carregar o comprovativo de pagamento.</p>' . imz_render_pro_form_content();
        }
        $metodo = sanitize_text_field($_POST['metodo_pagamento']);
        $comprovativo_url = wp_get_attachment_url($attachment_id);
        $artist_name = wp_get_current_user()->display_name;
        
        wp_insert_post([
            'post_type' => 'imz_subscription', 'post_title' => 'Pedido PRO - ' . $artist_name,
            'post_status' => 'publish', 'post_author' => $artist_id,
            'meta_input' => [
                'artist_id' => $artist_id, 'comprovativo_url' => $comprovativo_url,
                'comprovativo_id' => $attachment_id, 'metodo_pagamento' => $metodo, 'status' => 'pendente'
            ]
        ]);
        
        return '<div class="imz-message imz-message-success"><strong>Obrigado!</strong> O seu pedido para se tornar Artista PRO foi enviado com sucesso. A sua conta será atualizada assim que o nosso time verificar o pagamento.</div>';
    }

    return imz_render_pro_form_content();
}

function imz_render_pro_form_content() {
    $mpesa_number = get_option('imz_mpesa_number', '84 000 0000');
    $emola_number = get_option('imz_emola_number', '86 000 0000');
    $pro_price = get_option('imz_pro_subscription_price', '1500');
    $price_text = '<strong>' . esc_html($pro_price) . ' MT</strong> por mês';

    ob_start();
    ?>
    <div class="imz-form-container imz-pro-upgrade-page">
        <h2>Torne-se um Artista PRO</h2>
        <p class="imz-form-description">Faça o upgrade da sua conta para ter acesso a funcionalidades exclusivas. O custo é de <?php echo $price_text; ?>.</p>
        <form method="post" class="imz-boost-form" enctype="multipart/form-data">
            <?php wp_nonce_field('imz_become_pro_action', 'imz_pro_nonce_field'); ?>
            <div class="imz-upgrade-step">
                <div class="imz-step-number">1</div>
                <div class="imz-step-content">
                    <h4>Efetue o Pagamento</h4>
                    <p>Por favor, transfira o valor exato para uma das contas abaixo e guarde o comprovativo.</p>
                    <div class="imz-payment-details">
                        <span>M-Pesa: <strong><?php echo esc_html($mpesa_number); ?></strong></span>
                        <span>e-Mola: <strong><?php echo esc_html($emola_number); ?></strong></span>
                    </div>
                </div>
            </div>
            <div class="imz-upgrade-step">
                <div class="imz-step-number">2</div>
                <div class="imz-step-content">
                    <h4>Envie o Comprovativo</h4>
                    <div class="imz-form-group">
                        <label for="metodo_pagamento">Qual método usou?</label>
                        <select name="metodo_pagamento" required><option value="M-Pesa">M-Pesa</option><option value="e-Mola">e-Mola</option></select>
                    </div>
                    <div class="imz-form-group">
                        <label for="comprovativo_upload" class="imz-file-uploader"><div class="imz-file-uploader-label">Clique para selecionar o Comprovativo<span>JPG, PNG ou GIF, até 2MB</span></div></label>
                        <input type="file" id="comprovativo_upload" accept=".jpg,.jpeg,.png,.gif" required>
                        <div class="imz-progress-container"><div class="imz-progress-bar"></div><span class="imz-progress-text">0%</span></div>
                        <p class="imz-file-notice"></p>
                    </div>
                    <input type="hidden" name="comprovativo_attachment_id" id="comprovativo_attachment_id" value="">
                </div>
            </div>
            <button type="submit" name="imz_submit_pro_request" class="imz-botao-principal">Confirmar Upgrade e Enviar Comprovativo</button>
        </form>
    </div>
    <?php
    return ob_get_clean();
}
