<?php
// includes/submission-corrections.php

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

/**
 * 1. Função para injetar o Modal de Correção no rodapé do site
 */
function rmbz_render_corrections_modal() {
    ?>
    <div id="correction-modal" class="tickets-modal-overlay" style="display:none; position:fixed; top:0; left:0; width:100%; height:100%; background:rgba(0,0,0,0.85); z-index:999999; justify-content:center; align-items:center;">
        <div class="tickets-modal-content" style="background:#1e1e1e; padding:30px; border-radius:12px; max-width:450px; width:90%; border:1px solid #e67e22; position:relative; box-shadow: 0 10px 40px rgba(230, 126, 34, 0.3);">
            <button onclick="document.getElementById('correction-modal').style.display='none'" style="position:absolute; right:20px; top:20px; background:none; border:none; color:#aaa; font-size:24px; cursor:pointer;">&times;</button>
            
            <h3 style="color:#e67e22; margin-top:0; font-size:20px;">⚠️ Ação Necessária</h3>
            
            <div style="background:#111; padding:15px; border-radius:6px; border-left:3px solid #e67e22; margin-bottom:20px;">
                <strong style="color:#ccc; font-size:12px; display:block; margin-bottom:5px;">Instruções da Administração:</strong>
                <p id="correction-reason-text" style="color:#fff; font-size:14px; margin:0; line-height:1.5;"></p>
            </div>

            <form method="post" action="<?php echo esc_url(admin_url('admin-post.php')); ?>" enctype="multipart/form-data">
                <input type="hidden" name="action" value="rmbz_process_correction">
                <input type="hidden" name="sub_id" id="correction-sub-id" value="">
                <?php wp_nonce_field('rmbz_correction_nonce'); ?>

                <div id="box-audio-fix" style="display:none; margin-bottom:15px;">
                    <label style="color:#ccc; font-size:12px; font-weight:bold; display:block; margin-bottom:5px;">Novo Ficheiro de Áudio/Vídeo:</label>
                    <input type="file" name="new_audio" style="width:100%; background:#111; color:#fff; padding:10px; border:1px solid #444; border-radius:4px;">
                </div>

                <div id="box-cover-fix" style="display:none; margin-bottom:15px;">
                    <label style="color:#ccc; font-size:12px; font-weight:bold; display:block; margin-bottom:5px;">Nova Imagem de Capa/Thumbnail (JPG/PNG):</label>
                    <input type="file" name="new_cover" accept="image/jpeg,image/png" style="width:100%; background:#111; color:#fff; padding:10px; border:1px solid #444; border-radius:4px;">
                </div>

                <div id="box-link-fix" style="display:none; margin-bottom:20px;">
                    <label style="color:#ccc; font-size:12px; font-weight:bold; display:block; margin-bottom:5px;">Novo Link (Facebook / YouTube / Drive):</label>
                    <input type="url" name="new_link" placeholder="Ex: https://..." style="width:100%; background:#111; color:#fff; padding:10px; border:1px solid #444; border-radius:4px;">
                </div>

                <p style="font-size:11px; color:#aaa; margin-bottom:15px;">* Preencha os campos obrigatórios acima e clique em Enviar.</p>

                <button type="submit" class="onemz-btn" style="background: linear-gradient(90deg, #e67e22, #d35400); color:#fff; width:100%; padding:12px; border-radius:6px; border:none; font-weight:bold; cursor:pointer;">Enviar Correções</button>
            </form>
        </div>
    </div>

    <script>
    // Event listener global para apanhar os botões dinamicamente
    document.addEventListener('click', function(e) {
        // Encontra o botão clicado
        const btn = e.target.closest('.rmbz-fix-submission-btn');
        
        if (btn) {
            e.preventDefault(); // Impede o botão de recarregar a página
            
            const modal = document.getElementById('correction-modal');
            const reasonText = document.getElementById('correction-reason-text');
            const subIdInput = document.getElementById('correction-sub-id');

            const boxAudio = document.getElementById('box-audio-fix');
            const boxCover = document.getElementById('box-cover-fix');
            const boxLink = document.getElementById('box-link-fix');

            if (modal) {
                // Puxar os dados dos atributos data do botão
                reasonText.innerText = btn.getAttribute('data-reason') || 'Por favor, atualize os ficheiros ou links conforme solicitado.';
                subIdInput.value = btn.getAttribute('data-sub-id');
                
                // Mostrar/Ocultar caixa de Áudio
                if(btn.getAttribute('data-audio') == '1') { 
                    boxAudio.style.display = 'block'; 
                    boxAudio.querySelector('input').required = true; 
                } else { 
                    boxAudio.style.display = 'none'; 
                    boxAudio.querySelector('input').required = false; 
                }
                
                // Mostrar/Ocultar caixa de Capa
                if(btn.getAttribute('data-cover') == '1') { 
                    boxCover.style.display = 'block'; 
                    boxCover.querySelector('input').required = true; 
                } else { 
                    boxCover.style.display = 'none'; 
                    boxCover.querySelector('input').required = false; 
                }
                
                // Mostrar/Ocultar caixa de Link
                if(btn.getAttribute('data-link') == '1') { 
                    boxLink.style.display = 'block'; 
                    boxLink.querySelector('input').required = true; 
                } else { 
                    boxLink.style.display = 'none'; 
                    boxLink.querySelector('input').required = false; 
                }
                
                // Abre o Pop-up visualmente
                modal.style.display = 'flex';
            }
        }
    });
    </script>
    <?php
}
// Aciona o Modal para ser injetado no rodapé caso estejamos no painel do utilizador
add_action('wp_footer', 'rmbz_render_corrections_modal');

/**
 * 2. Processador do Formulário de Correção
 *
 * [SEC-SC1] Hardening 2026-04: uploads agora passam por rmbz_handle_proof_upload
 * (que valida MIME real via finfo + extensão + renomeia o ficheiro). Antes
 * usava wp_handle_upload sem `mimes`, deixando passar qualquer tipo permitido
 * pelo WP — vector clássico de upload de webshells .phtml/.phar.
 */
function rmbz_handle_submission_correction() {
    if ( ! isset( $_POST['_wpnonce'] ) || ! wp_verify_nonce( $_POST['_wpnonce'], 'rmbz_correction_nonce' ) ) wp_die('Segurança falhou.');
    if ( ! function_exists('rmbz_is_user_logged_in') || ! rmbz_is_user_logged_in() ) wp_die('Não autorizado.');

    if ( session_status() === PHP_SESSION_NONE && ! headers_sent() ) { session_start(); }

    global $wpdb;
    $sub_id = isset($_POST['sub_id']) ? intval($_POST['sub_id']) : 0;
    $user_telemovel = rmbz_get_current_user_telemovel();
    $table_name = $wpdb->prefix . 'rmbz_artist_submissions';

    // Verificar se a submissão pertence ao artista
    $submission = $wpdb->get_row($wpdb->prepare("SELECT * FROM {$table_name} WHERE id = %d AND artist_telemovel = %s", $sub_id, $user_telemovel));

    if (!$submission) {
        $_SESSION['rmbz_withdrawal_notice'] = ['error', 'Submissão não encontrada.'];
        rmbz_safe_redirect( wp_get_referer() ? wp_get_referer() : home_url('/minha-conta/') );
    }

    $extra_data = !empty($submission->extra_data) ? json_decode($submission->extra_data, true) : [];
    if ( ! is_array($extra_data) ) $extra_data = [];
    $updated = false;

    // 1. Processar Novo Link
    if (!empty($_POST['new_link'])) {
        $new_link = esc_url_raw( wp_unslash($_POST['new_link']) );
        if ( $new_link !== '' ) {
            if ($submission->scenario_type === 'Redes Sociais') {
                if (strpos($new_link, 'facebook.com') !== false) {
                    $extra_data['facebook_url'] = $new_link;
                } elseif (strpos($new_link, 'youtube.com') !== false || strpos($new_link, 'youtu.be') !== false) {
                    $extra_data['youtube_url'] = $new_link;
                } else {
                    $extra_data['video_link_hd'] = $new_link;
                }
            } else {
                $extra_data['youtube_link'] = $new_link;
            }
            $updated = true;
        }
    }

    // 2. Processar Ficheiros (Upload) — agora via helper seguro
    require_once( ABSPATH . 'wp-admin/includes/file.php' );

    if ( !empty($_FILES['new_audio']['name']) ) {
        $audio_url = function_exists('rmbz_handle_proof_upload') ? rmbz_handle_proof_upload('new_audio') : false;
        if ( $audio_url ) {
            $wpdb->update($table_name, ['music_file_url' => esc_url_raw($audio_url)], ['id' => $sub_id]);
            $updated = true;
        }
    }

    if ( !empty($_FILES['new_cover']['name']) ) {
        $cover_url = function_exists('rmbz_handle_proof_upload') ? rmbz_handle_proof_upload('new_cover') : false;
        if ( $cover_url ) {
            if ($submission->scenario_type === 'Redes Sociais') {
                $extra_data['thumbnail_url'] = esc_url_raw($cover_url);
            } else {
                $extra_data['cover_image'] = esc_url_raw($cover_url);
            }
            $updated = true;
        }
    }

    if ($updated) {
        // Limpar as flags de erro, pois o utilizador já enviou as correções
        unset($extra_data['needs_audio_fix'], $extra_data['needs_cover_fix'], $extra_data['needs_link_fix']);

        // Atualiza a BD: Muda o status de volta para 'pendente' e escreve aviso
        $wpdb->update(
            $table_name,
            [
                'extra_data' => wp_json_encode($extra_data),
                'review_status' => 'pendente', 
                'rejection_reason' => '⚠️ Correção enviada pelo artista. Por favor, reveja os ficheiros novamente.'
            ],
            ['id' => $sub_id]
        );
        
        $_SESSION['rmbz_withdrawal_notice'] = ['success', 'Correções enviadas com sucesso! A sua submissão está novamente em análise.'];
    } else {
        $_SESSION['rmbz_withdrawal_notice'] = ['error', 'Atenção: Nenhum ficheiro ou link novo foi fornecido no formulário.'];
    }

    rmbz_safe_redirect( wp_get_referer() ? wp_get_referer() : home_url('/minha-conta/') );
}
add_action('admin_post_rmbz_process_correction', 'rmbz_handle_submission_correction');
add_action('admin_post_nopriv_rmbz_process_correction', 'rmbz_handle_submission_correction');