<?php

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

// --- CRIA O MENU PARA A FERRAMENTA DE LIMPEZA ---
add_action('admin_menu', function() {
    add_submenu_page(
        imz_admin_parent_slug(),
        'Limpeza e Manutenção',
        'Limpeza e Manutenção',
        'manage_options',
        'imz_cleanup_tool',
        'imz_render_cleanup_page'
    );
});

// --- RENDERIZA A PÁGINA DA FERRAMENTA ---
function imz_render_cleanup_page() {
    ?>
    <div class="wrap">
        <h1>Limpeza e Manutenção do Plugin</h1>
        <p>Use estas ferramentas para remover dados antigos e otimizar a base de dados do seu site.</p>

        <div class="imz-cleanup-card" style="border-left: 4px solid #2271b1;">
            <h2>Gerir Logs de Download</h2>
            
            <h3>1. Limpar Logs Antigos (Sistema Anterior)</h3>
            <p>Com a atualização para a versão 8.0, os logs guardados como "Posts" tornaram-se obsoletos. Use isto para os remover e libertar espaço na tabela <code>wp_posts</code>.</p>
            <form method="post">
                <?php wp_nonce_field('imz_cleanup_cpt_logs'); ?>
                <input type="hidden" name="action" value="imz_delete_old_cpt_logs">
                <?php submit_button('Apagar Todos os Logs Antigos (CPT)', 'delete'); ?>
            </form>

            <hr style="margin: 20px 0; border: 0; border-top: 1px solid #eee;">

            <h3>2. Otimizar Nova Tabela de Analytics</h3>
            <p>Se a nova tabela de registos estiver muito grande, pode apagar o histórico antigo para poupar espaço.</p>
            <form method="post">
                <?php wp_nonce_field('imz_prune_analytics'); ?>
                <input type="hidden" name="action" value="imz_prune_analytics_table">
                <label style="font-weight: 600;">
                    Escolha o período de retenção: <br>
                    <select name="days_retention" style="margin-top: 5px;">
                        <option value="30">Apagar registos com mais de 30 dias</option>
                        <option value="90" selected>Apagar registos com mais de 3 meses (90 dias)</option>
                        <option value="180">Apagar registos com mais de 6 meses</option>
                        <option value="365">Apagar registos com mais de 1 ano</option>
                    </select>
                </label>
                <br>
                <?php submit_button('Limpar Tabela de Analytics', 'primary', 'submit', true, ['style' => 'margin-top: 10px;']); ?>
            </form>
        </div>

        <div class="imz-cleanup-card" style="border-left: 4px solid #d63638;">
            <h2>Resetar Saldos Pendentes de Artistas</h2>
            <p><strong>Atenção:</strong> Use esta ferramenta se um artista ficou com saldo negativo após um pedido de pagamento ser cancelado. Esta ação irá forçar o "saldo pendente" de <strong>todos</strong> os artistas para zero (0).</p>
            <form method="post">
                <?php wp_nonce_field('imz_cleanup_pending_balance'); ?>
                <input type="hidden" name="action" value="imz_reset_pending_balances">
                <?php submit_button('Resetar Saldos Pendentes', 'delete'); ?>
            </form>
        </div>

        <div class="imz-cleanup-card">
            <h2>Limpar Saldos Antigos de Artistas</h2>
            <p>Remove registos de "saldo disponível" de versões muito antigas do plugin.</p>
            <form method="post">
                <?php wp_nonce_field('imz_cleanup_balances'); ?>
                <input type="hidden" name="action" value="imz_cleanup_old_balances">
                <?php submit_button('Apagar Saldos Antigos', 'delete'); ?>
            </form>
        </div>

        <div class="imz-cleanup-card">
            <h2>Atualizar Formato de Avisos (Strikes)</h2>
            <p>Converte a contagem de avisos do formato antigo para o novo formato baseado em datas.</p>
            <form method="post">
                <?php wp_nonce_field('imz_update_strikes'); ?>
                <input type="hidden" name="action" value="imz_update_strikes_format">
                <?php submit_button('Verificar e Atualizar Strikes'); ?>
            </form>
        </div>

        <div class="imz-cleanup-card">
            <h2>Limpar Opções de Teste Antigas</h2>
            <p>Remove dados de configurações de teste (efeitos visuais) que já não são usados.</p>
            <form method="post">
                <?php wp_nonce_field('imz_cleanup_test_effects'); ?>
                <input type="hidden" name="action" value="imz_cleanup_test_effects">
                <?php submit_button('Limpar Dados de Teste', 'delete'); ?>
            </form>
        </div>

        <?php
        // --- PROCESSAMENTO DAS AÇÕES ---
        if ($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['action'])) {
            echo '<div class="notice notice-success is-dismissible" style="margin-top: 20px;"><p>';
            
            global $wpdb;

            // 1. Limpar Logs Antigos (CPT)
            if ($_POST['action'] === 'imz_delete_old_cpt_logs' && check_admin_referer('imz_cleanup_cpt_logs')) {
                // Apaga os posts do tipo antigo
                $deleted_posts = $wpdb->query("DELETE FROM {$wpdb->posts} WHERE post_type = 'imz_download_log'");
                // Apaga os metadados órfãos (limpeza geral de segurança)
                $wpdb->query("DELETE FROM {$wpdb->postmeta} WHERE post_id NOT IN (SELECT ID FROM {$wpdb->posts})");
                
                echo '<strong>Limpeza concluída!</strong> Foram removidos ' . intval($deleted_posts) . ' registos do tipo "imz_download_log" da tabela de posts.';
            }

            // 2. Otimizar Tabela de Analytics
            if ($_POST['action'] === 'imz_prune_analytics_table' && check_admin_referer('imz_prune_analytics')) {
                $table_name = $wpdb->prefix . 'imz_analytics';
                $days = absint($_POST['days_retention']);
                
                // Apaga registos mais antigos que X dias
                $deleted_rows = $wpdb->query($wpdb->prepare(
                    "DELETE FROM $table_name WHERE download_date < DATE_SUB(NOW(), INTERVAL %d DAY)",
                    $days
                ));
                
                echo '<strong>Manutenção concluída!</strong> Foram apagados ' . intval($deleted_rows) . ' registos da tabela de analytics com mais de ' . $days . ' dias.';
            }

            // 3. Resetar Saldos Pendentes
            if ($_POST['action'] === 'imz_reset_pending_balances' && check_admin_referer('imz_cleanup_pending_balance')) {
                $count = delete_metadata('user', 0, '_artist_pending_payout', '', true);
                echo '<strong>Saldos pendentes resetados!</strong> ' . intval($count) . ' utilizadores afetados.';
            }

            // 4. Limpar Saldos Antigos
            if ($_POST['action'] === 'imz_cleanup_old_balances' && check_admin_referer('imz_cleanup_balances')) {
                $count = delete_metadata('user', 0, '_artist_available_earnings', '', true);
                echo '<strong>Saldos antigos apagados!</strong> ' . intval($count) . ' registos removidos.';
            }

            // 5. Atualizar Strikes
            if ($_POST['action'] === 'imz_update_strikes_format' && check_admin_referer('imz_update_strikes')) {
                $users = get_users(['meta_key' => '_fraudulent_claim_strikes']);
                $converted_count = 0;
                foreach ($users as $user) {
                    $strikes = get_user_meta($user->ID, '_fraudulent_claim_strikes', true);
                    if (is_numeric($strikes) && !is_array($strikes)) {
                        $new_strikes = [];
                        for ($i = 0; $i < $strikes; $i++) { $new_strikes[] = strtotime('-35 days'); }
                        update_user_meta($user->ID, '_fraudulent_claim_strikes', $new_strikes);
                        $converted_count++;
                    }
                }
                echo '<strong>Strikes atualizados!</strong> ' . $converted_count . ' utilizadores convertidos.';
            }

            // 6. Limpar Testes
            if ($_POST['action'] === 'imz_cleanup_test_effects' && check_admin_referer('imz_cleanup_test_effects')) {
                $count = delete_post_meta_by_key('_imz_testar_efeito');
                echo '<strong>Dados de teste removidos!</strong> ' . intval($count) . ' registos apagados.';
            }

            echo '</p></div>';
        }
        ?>
    </div>
    <style>
        .imz-cleanup-card { background: #fff; border: 1px solid #c3c4c7; padding: 20px; margin-top: 20px; box-shadow: 0 1px 1px rgba(0,0,0,.04); border-radius: 4px; }
        .imz-cleanup-card h2 { font-size: 1.3em; margin-top: 0; }
        .imz-cleanup-card h3 { font-size: 1.1em; margin-bottom: 5px; color: #333; }
    </style>
    <?php
}
