<?php
/**
 * 1MZ For Artists — Diagnóstico de Estatísticas de Royalties
 *
 * Verifica se a importação chegou bem à daily_stats e se o artista vai ver
 * os streams, lojas e países nas suas estatísticas.
 *
 * COMO USAR:
 *   1. Coloca este ficheiro em wp-content/plugins/1mz-for-artists/includes/
 *   2. Vai a wp-admin → ?page=rmbz-diagnostico-stats
 *      (atalho directo: tua-url.com/wp-admin/admin.php?page=rmbz-diagnostico-stats)
 *   3. Lê o relatório e segue as instruções
 *
 * Quando terminares, podes apagar este ficheiro — não tem efeitos colaterais.
 */

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

add_action('admin_menu', function() {
    add_submenu_page(
        'tools.php',
        '1MZ Diagnóstico Stats',
        '🔍 1MZ Diagnóstico Stats',
        'manage_options',
        'rmbz-diagnostico-stats',
        'rmbz_diagnostico_stats_render'
    );
});

function rmbz_diagnostico_stats_render() {
    if ( ! current_user_can('manage_options') ) wp_die('Sem permissão.');

    global $wpdb;
    $t_daily    = $wpdb->prefix . 'rmbz_distro_daily_stats';
    $t_ledger   = $wpdb->prefix . 'rmbz_distro_ledger';
    $t_logs     = $wpdb->prefix . 'rmbz_distro_import_logs';
    $t_stats    = $wpdb->prefix . 'rmbz_distro_stats';
    $t_wallets  = $wpdb->prefix . 'rmbz_wallets';
    $t_tracks   = $wpdb->prefix . 'rmbz_distro_tracks';

    echo '<div class="wrap" style="max-width:1100px;">';
    echo '<h1>🔍 Diagnóstico de Estatísticas de Royalties</h1>';
    echo '<p style="color:#666;">Verifica em que estado está a infraestrutura de stats. Os <strong>verdes</strong> estão OK, os <strong>amarelos</strong> avisam, os <strong>vermelhos</strong> são problemas a corrigir.</p>';
    echo '<style>
        .diag-box { background:#fff; border:1px solid #ccd0d4; border-left:4px solid #ccc; padding:15px 20px; margin:15px 0; border-radius:4px; }
        .diag-box.ok { border-left-color:#46b450; }
        .diag-box.warn { border-left-color:#f0b90b; background:#fffbeb; }
        .diag-box.err { border-left-color:#dc3232; background:#fff5f5; }
        .diag-box h3 { margin:0 0 10px 0; }
        .diag-box table { border-collapse:collapse; width:100%; margin-top:10px; }
        .diag-box th, .diag-box td { border:1px solid #e5e5e5; padding:6px 10px; text-align:left; font-size:13px; }
        .diag-box th { background:#f5f5f5; }
        .diag-box code { background:#f0f0f0; padding:2px 5px; border-radius:3px; font-size:12px; }
        .pill { display:inline-block; padding:2px 8px; border-radius:3px; font-size:11px; font-weight:bold; }
        .pill.ok { background:#46b450; color:#fff; }
        .pill.miss { background:#dc3232; color:#fff; }
    </style>';

    // ====================================================================
    // 1. DAILY_STATS — schema + conteúdo
    // ====================================================================
    echo '<h2>1️⃣ Tabela <code>rmbz_distro_daily_stats</code> (origem dos streams/lojas/países)</h2>';

    if ( $wpdb->get_var("SHOW TABLES LIKE '$t_daily'") !== $t_daily ) {
        echo '<div class="diag-box err"><h3>❌ Tabela NÃO existe</h3>';
        echo '<p>A tabela <code>' . esc_html($t_daily) . '</code> não foi encontrada. As estatísticas <strong>não funcionam de todo</strong>.</p>';
        echo '<p><strong>Solução:</strong> Visita <code>wp-admin → 1MZ → Distribuição</code> para forçar criação, ou desactiva e reactiva o plugin.</p></div>';
        echo '</div>';
        return;
    }

    $cols_daily = (array) $wpdb->get_col("SHOW COLUMNS FROM $t_daily");
    $required = ['artist_telemovel', 'release_id', 'track_id', 'report_date', 'streams', 'sales', 'country_code', 'store', 'import_hash', 'pending_approval'];
    $missing = array_diff($required, $cols_daily);

    if ( empty($missing) ) {
        echo '<div class="diag-box ok"><h3>✅ Schema completo</h3>';
        echo '<p>Todas as ' . count($required) . ' colunas necessárias existem.</p></div>';
    } else {
        echo '<div class="diag-box err"><h3>❌ Faltam colunas críticas</h3>';
        echo '<p>Esta é a <strong>causa-raiz</strong> de não veres dados. As importações não conseguem inserir corretamente.</p>';
        echo '<table><tr><th>Coluna em falta</th><th>Impacto</th></tr>';
        foreach ( $missing as $col ) {
            $impact = match($col) {
                'pending_approval' => 'INSERT da importação falha → linhas não chegam',
                'import_hash'      => 'Aprovação/rejeição não consegue identificar linhas',
                'country_code'     => 'Top países sempre vazio',
                'store'            => 'Top lojas (Spotify, Apple) sempre vazio',
                'streams'          => 'Contagem de streams sempre 0',
                'sales'            => 'Earnings sempre $0',
                default            => 'Stats parcialmente inválidas'
            };
            echo '<tr><td><code>' . esc_html($col) . '</code></td><td>' . esc_html($impact) . '</td></tr>';
        }
        echo '</table>';
        echo '<p style="margin-top:15px;"><strong>Solução:</strong> Aplicar o patch ao <code>import-processor.php</code> (que já te enviei) e visitar uma página do admin — o patch corrige o schema automaticamente.</p>';
        echo '</div>';
    }

    // Total de registos
    $total_rows = (int) $wpdb->get_var("SELECT COUNT(*) FROM $t_daily");
    $rows_pending = in_array('pending_approval', $cols_daily, true)
        ? (int) $wpdb->get_var("SELECT COUNT(*) FROM $t_daily WHERE pending_approval = 1")
        : 0;
    $rows_approved = in_array('pending_approval', $cols_daily, true)
        ? (int) $wpdb->get_var("SELECT COUNT(*) FROM $t_daily WHERE pending_approval = 0")
        : $total_rows;

    echo '<div class="diag-box ' . ($total_rows > 0 ? 'ok' : 'warn') . '">';
    echo '<h3>📊 Conteúdo da tabela</h3>';
    echo '<table>';
    echo '<tr><th>Métrica</th><th>Valor</th></tr>';
    echo '<tr><td>Total de linhas</td><td><strong>' . number_format($total_rows) . '</strong></td></tr>';
    if ( in_array('pending_approval', $cols_daily, true) ) {
        echo '<tr><td>Linhas aprovadas (visíveis ao artista)</td><td><strong style="color:#46b450;">' . number_format($rows_approved) . '</strong></td></tr>';
        echo '<tr><td>Linhas pendentes de aprovação</td><td><strong style="color:#f0b90b;">' . number_format($rows_pending) . '</strong></td></tr>';
    }
    echo '</table>';
    if ( $total_rows === 0 ) {
        echo '<p style="margin-top:10px;"><strong>⚠️ A tabela está vazia.</strong> Nenhuma importação chegou aqui — significa que os INSERTs estão a falhar (ver colunas em falta acima).</p>';
    }
    echo '</div>';

    // ====================================================================
    // 2. ARTISTAS COM DADOS
    // ====================================================================
    echo '<h2>2️⃣ Artistas com dados em <code>daily_stats</code></h2>';

    if ( $total_rows === 0 ) {
        echo '<div class="diag-box warn"><p>Sem dados para analisar (ver secção anterior).</p></div>';
    } else {
        $select_extra = '';
        if ( in_array('pending_approval', $cols_daily, true) ) {
            $select_extra = ", SUM(CASE WHEN pending_approval=0 THEN streams ELSE 0 END) AS approved_streams,
                              SUM(CASE WHEN pending_approval=1 THEN streams ELSE 0 END) AS pending_streams";
        }
        $by_artist = $wpdb->get_results(
            "SELECT artist_telemovel,
                    COUNT(*) AS lines_count,
                    SUM(streams) AS total_streams,
                    SUM(sales) AS total_sales,
                    COUNT(DISTINCT store) AS distinct_stores,
                    COUNT(DISTINCT country_code) AS distinct_countries
                    $select_extra
             FROM $t_daily
             GROUP BY artist_telemovel
             ORDER BY total_streams DESC
             LIMIT 20"
        );

        if ( empty($by_artist) ) {
            echo '<div class="diag-box warn"><p>Nenhum artista encontrado.</p></div>';
        } else {
            echo '<div class="diag-box ok">';
            echo '<table>';
            echo '<tr><th>Telemóvel</th><th>Nome</th><th>Linhas</th><th>Streams totais</th><th>Streams aprovados</th><th>Receita</th><th>Lojas</th><th>Países</th></tr>';
            foreach ( $by_artist as $a ) {
                $nome = $wpdb->get_var( $wpdb->prepare("SELECT user_nome FROM $t_wallets WHERE user_telemovel = %s", $a->artist_telemovel) );
                $approved_streams = isset($a->approved_streams) ? (int)$a->approved_streams : (int)$a->total_streams;

                echo '<tr>';
                echo '<td><code>' . esc_html($a->artist_telemovel) . '</code></td>';
                echo '<td>' . esc_html($nome ?: '— sem wallet —') . '</td>';
                echo '<td>' . number_format($a->lines_count) . '</td>';
                echo '<td>' . number_format($a->total_streams) . '</td>';
                echo '<td><strong style="color:' . ($approved_streams > 0 ? '#46b450' : '#dc3232') . ';">' . number_format($approved_streams) . '</strong></td>';
                echo '<td>$' . number_format($a->total_sales, 2) . '</td>';
                echo '<td>' . (int)$a->distinct_stores . '</td>';
                echo '<td>' . (int)$a->distinct_countries . '</td>';
                echo '</tr>';
            }
            echo '</table>';
            echo '<p style="margin-top:10px; font-size:12px; color:#666;"><strong>Como ler:</strong> "Streams aprovados" é o número que o artista <em>realmente vê</em> nas suas estatísticas. Se for 0 mas "Streams totais" tiver número, significa que a importação não foi aprovada.</p>';
            echo '</div>';
        }
    }

    // ====================================================================
    // 3. SAMPLE — primeiras linhas para inspecção visual
    // ====================================================================
    if ( $total_rows > 0 ) {
        echo '<h2>3️⃣ Sample das linhas (últimas 10 inserções)</h2>';
        $sample = $wpdb->get_results("SELECT * FROM $t_daily ORDER BY id DESC LIMIT 10");
        echo '<div class="diag-box">';
        echo '<table>';
        echo '<tr>';
        if ( ! empty($sample) ) {
            foreach ( array_keys((array)$sample[0]) as $col ) {
                echo '<th>' . esc_html($col) . '</th>';
            }
            echo '</tr>';
            foreach ( $sample as $row ) {
                echo '<tr>';
                foreach ( (array)$row as $val ) {
                    $s = (string) $val;
                    if ( strlen($s) > 30 ) $s = substr($s, 0, 27) . '...';
                    echo '<td style="font-size:11px;">' . esc_html($s) . '</td>';
                }
                echo '</tr>';
            }
        }
        echo '</table>';
        echo '</div>';
    }

    // ====================================================================
    // 4. IMPORTAÇÕES E LIGAÇÃO COM DAILY_STATS
    // ====================================================================
    echo '<h2>4️⃣ Importações e ligação com daily_stats</h2>';

    if ( $wpdb->get_var("SHOW TABLES LIKE '$t_logs'") !== $t_logs ) {
        echo '<div class="diag-box warn"><p>Tabela <code>import_logs</code> não existe.</p></div>';
    } else {
        $imports = $wpdb->get_results("SELECT * FROM $t_logs ORDER BY imported_at DESC LIMIT 10");
        if ( empty($imports) ) {
            echo '<div class="diag-box warn"><p>Sem importações registadas.</p></div>';
        } else {
            echo '<div class="diag-box">';
            echo '<table>';
            echo '<tr><th>Hash (8 chars)</th><th>Distribuidora</th><th>Período</th><th>Approval</th><th>Linhas no daily_stats</th></tr>';
            foreach ( $imports as $imp ) {
                $hash = $imp->file_hash;
                $lines_in_daily = in_array('import_hash', $cols_daily, true)
                    ? (int) $wpdb->get_var( $wpdb->prepare("SELECT COUNT(*) FROM $t_daily WHERE import_hash = %s", $hash) )
                    : 0;
                $approval = $imp->approval_status ?? 'n/a';
                $color = $approval === 'approved' ? '#46b450' : ($approval === 'pending_approval' ? '#f0b90b' : '#666');
                $daily_color = $lines_in_daily > 0 ? '#46b450' : '#dc3232';
                echo '<tr>';
                echo '<td><code>' . esc_html(substr($hash, 0, 8)) . '...</code></td>';
                echo '<td>' . esc_html($imp->source_name ?? '—') . '</td>';
                echo '<td>' . esc_html($imp->reporting_period ?? '—') . '</td>';
                echo '<td><span class="pill" style="background:' . $color . '; color:#fff;">' . esc_html($approval) . '</span></td>';
                echo '<td><strong style="color:' . $daily_color . ';">' . number_format($lines_in_daily) . '</strong></td>';
                echo '</tr>';
            }
            echo '</table>';
            echo '<p style="margin-top:10px; font-size:12px; color:#666;"><strong>Como ler:</strong> Se "Linhas no daily_stats" for <strong style="color:#dc3232;">0</strong> para uma importação aprovada, significa que os dados de loja/país/streams nunca foram gravados — a importação só populou o ledger.</p>';
            echo '</div>';
        }
    }

    // ====================================================================
    // 5. DIAGNÓSTICO FINAL
    // ====================================================================
    echo '<h2>5️⃣ Veredicto</h2>';
    $verdict_class = 'ok';
    $verdict_msgs = [];

    if ( ! empty($missing) ) {
        $verdict_class = 'err';
        $verdict_msgs[] = '❌ <strong>Faltam colunas críticas em daily_stats</strong> — aplica o patch do <code>import-processor.php</code> e re-importa o CSV.';
    }

    if ( $total_rows === 0 && empty($missing) ) {
        $verdict_class = 'warn';
        $verdict_msgs[] = '⚠️ Schema OK mas tabela vazia — fizeste a importação <em>antes</em> de o schema ter as colunas todas? Tens de re-importar o CSV.';
    }

    if ( $rows_approved === 0 && $total_rows > 0 ) {
        $verdict_class = 'warn';
        $verdict_msgs[] = '⚠️ Há dados mas nenhum aprovado — vai a <em>Royalties → Importações</em> e clica "Aprovar".';
    }

    if ( empty($verdict_msgs) ) {
        $verdict_msgs[] = '✅ <strong>Tudo OK!</strong> O artista deve ver streams, lojas e países nas suas estatísticas. Se mesmo assim não vê, o problema é noutro lado (cache, sessão, etc.).';
    }

    echo '<div class="diag-box ' . $verdict_class . '">';
    foreach ( $verdict_msgs as $m ) {
        echo '<p style="margin:5px 0;">' . wp_kses_post($m) . '</p>';
    }
    echo '</div>';

    echo '<p style="margin-top:30px; padding:15px; background:#f0f0f0; border-radius:4px; font-size:12px; color:#666;">Quando terminares, apaga o ficheiro <code>includes/rmbz-diagnostico-stats.php</code> e remove a linha do <code>1mz-for-artists.php</code> que o carrega.</p>';

    echo '</div>';
}
