<?php
// includes/admin/admin-notices.php

/**
 * Gestão de Notificações Admin do 1MZ For Artists.
 * Exibe mensagens de sucesso ou erro após ações administrativas.
 */

if ( ! defined( 'ABSPATH' ) ) {
    exit; // Acesso direto bloqueado
}

/**
 * Mostra notificações administrativas com base nos parâmetros da URL.
 */
function rmbz_mostrar_avisos_gerais() {
    $screen = get_current_screen();
    
    // SEGURANÇA: Verifica se o ecrã e o ID existem antes de usar
    // Isto previne o erro "Passing null to parameter #1" no PHP 8.1+
    if ( ! $screen || ! isset( $screen->id ) || empty( $screen->id ) ) {
        return;
    }

    $screen_id = (string) $screen->id; // Força que seja uma string

    // -------------------------------------------------------------------------
    // 1. PÁGINA: AUDIÇÕES (LISTAS DE ENVIOS)
    // -------------------------------------------------------------------------
    // Slugs: rmbz-envios-site / rmbz-envios-social / rmbz-dashboard (legacy)
    //
    // [fix gerir envio] O botão "Gerir Envio" foi corrigido para apontar
    // para 'rmbz-envios-site' (era 'rmbz-dashboard', que é a Visão Geral).
    // As notices passam a aparecer em qualquer das 3 páginas para não
    // perdermos o feedback "Música aprovada/rejeitada/apagada".
    $sid = (string) ($screen_id ?? '');
    $is_submission_page = (
        strpos( $sid, 'rmbz-envios-site' )   !== false ||
        strpos( $sid, 'rmbz-envios-social' ) !== false ||
        strpos( $sid, 'rmbz-dashboard' )     !== false
    );
    if ( $is_submission_page && isset($_GET['status']) ) {
        $message = '';
        $class = 'notice-success';

        switch ($_GET['status']) {
            case 'submission_approved':
                $message = 'Música aprovada com sucesso! O contrato foi gerado e o artista notificado.';
                break;
            case 'submission_rejected':
                $message = 'Música rejeitada com sucesso. O feedback foi enviado ao artista.';
                $class = 'notice-warning';
                break;
            case 'submission_deleted':
                $message = 'Submissão (Música) apagada permanentemente com sucesso.';
                break;
            case 'publication_required':
                $message = 'Para finalizar, seleciona uma publicação real já publicada no site.';
                $class = 'notice-error';
                break;
            case 'publication_invalid':
                $message = 'A publicação escolhida não pôde ser associada. Confirma se está publicada e se não pertence a outro Art Track.';
                $class = 'notice-error';
                break;
            case 'updated':
                $message = 'Submissão atualizada com sucesso.';
                break;
        }

        if ($message) {
            printf( '<div class="notice %s is-dismissible"><p>%s</p></div>', esc_attr($class), esc_html($message) );
        }
    }

    // -------------------------------------------------------------------------
    // 2. PÁGINA: GESTÃO DE PROJETOS
    // -------------------------------------------------------------------------
    // Slug: rmbz-projetos
    if ( strpos((string) ($screen_id ?? ''), 'rmbz-projetos') !== false ) {
        if ( isset($_GET['updated']) && $_GET['updated'] == 'true' ) {
            printf( '<div class="notice notice-success is-dismissible"><p>Projeto atualizado com sucesso!</p></div>' );
        }
        if ( isset($_GET['status']) && $_GET['status'] === 'deleted' ) {
            printf( '<div class="notice notice-success is-dismissible"><p>Projeto apagado com sucesso!</p></div>' );
        }
    }

    // -------------------------------------------------------------------------
    // 3. PÁGINA: DEPÓSITOS DE CARTEIRA
    // -------------------------------------------------------------------------
    // Slug: rmbz-depositos
    if ( strpos((string) ($screen_id ?? ''), 'rmbz-depositos') !== false && isset($_GET['status']) ) {
        $message = '';
        $class = 'notice-success';

        switch ($_GET['status']) {
            case 'deposito_aprovado':
                $message = 'Depósito aprovado! O valor foi creditado na carteira do artista.';
                break;
            case 'deposito_rejeitado':
                $message = 'Depósito rejeitado.';
                $class = 'notice-warning';
                break;
        }

        if ($message) {
            printf( '<div class="notice %s is-dismissible"><p>%s</p></div>', esc_attr($class), esc_html($message) );
        }
    }

    // -------------------------------------------------------------------------
    // 4. PÁGINA: PEDIDOS DE LEVANTAMENTO
    // -------------------------------------------------------------------------
    // Slug: rmbz-pedidos-levantamento
    if ( strpos((string) ($screen_id ?? ''), 'rmbz-pedidos-levantamento') !== false && isset($_GET['status']) ) {
        $message = '';
        $class = 'notice-success';

        switch ($_GET['status']) {
            case 'aprovado':
                $message = 'Levantamento processado e marcado como pago!';
                break;
            case 'rejeitado':
                $message = 'Levantamento rejeitado. O valor foi devolvido à carteira do artista.';
                break;
            case 'erro_reembolso':
                $message = 'ERRO CRÍTICO: Falha ao reembolsar o saldo. Verifique a carteira manualmente.';
                $class = 'notice-error';
                break;
        }

        if ($message) {
            printf( '<div class="notice %s is-dismissible"><p>%s</p></div>', esc_attr($class), esc_html($message) );
        }
    }

    // -------------------------------------------------------------------------
    // 5. PÁGINA: UTILIZADORES / CARTEIRAS
    // -------------------------------------------------------------------------
    // Slug: rmbz-utilizadores
    if ( strpos((string) ($screen_id ?? ''), 'rmbz-utilizadores') !== false && isset($_GET['status']) ) {
        $message = '';
        $class = 'notice-success';

        switch ($_GET['status']) {
            case 'trans_deleted':
                $message = 'Histórico de transações do utilizador apagado com sucesso.';
                break;
            
            case 'balance_updated':
                $message = 'Saldo do artista atualizado manualmente com sucesso!';
                break;
            case 'balance_failed':
                $error = isset($_GET['error']) ? urldecode($_GET['error']) : 'Erro desconhecido';
                $message = 'Falha ao atualizar saldo: ' . esc_html($error);
                $class = 'notice-error';
                break;
            
            case 'pin_updated':
                $message = 'PIN do artista redefinido com sucesso!';
                break;
            
            case 'user_status_changed':
                $message = 'Estado da conta (Banido/Ativo) atualizado com sucesso.';
                break;
                
            case 'sub_cancelled':
                $message = 'A subscrição do artista foi anulada com sucesso.';
                break;
        }

        if ($message) {
            printf( '<div class="notice %s is-dismissible"><p>%s</p></div>', esc_attr($class), $message );
        }
    }

    // -------------------------------------------------------------------------
    // 6. PÁGINA: HISTÓRICO DO UTILIZADOR
    // -------------------------------------------------------------------------
    // Slug: rmbz-historico-utilizador
    if ( strpos((string) ($screen_id ?? ''), 'rmbz-historico-utilizador') !== false && isset($_GET['status']) ) {
        if ($_GET['status'] === 'trans_deleted_ok') {
            printf( '<div class="notice notice-success is-dismissible"><p>Transação eliminada e saldo revertido com sucesso!</p></div>' );
        } elseif ($_GET['status'] === 'trans_deleted_fail') {
            printf( '<div class="notice notice-error is-dismissible"><p>Erro ao eliminar transação.</p></div>' );
        }
    }

    // -------------------------------------------------------------------------
    // 7. AVISO GERAL: ATUALIZAÇÃO DA BASE DE DADOS
    // -------------------------------------------------------------------------
    if ( $screen_id === 'dashboard' || $screen_id === 'plugins' || strpos((string) ($screen_id ?? ''), 'rmbz') !== false ) {
        
        $db_version = get_option('rmbz_db_version');
        
        // Verifica se a constante está definida antes de comparar (Fallback seguro)
        $plugin_version = defined('RMBZ_DB_VERSION') ? RMBZ_DB_VERSION : '1.0';
        
        if ( version_compare( $db_version, $plugin_version, '<' ) ) {
            // URL CORRIGIDA: Aponta para admin-post.php para garantir a execução da função
            $update_url = wp_nonce_url( 
                admin_url('admin-post.php?action=onemz_run_db_update'), 
                'onemz_db_update_nonce' 
            );
            
            $message = '<strong>1MZ For Artists:</strong> A estrutura da base de dados precisa ser atualizada para a versão ' . esc_html($plugin_version) . '.';
            $message .= ' <a href="' . esc_url($update_url) . '" class="button button-primary">Atualizar Agora</a>';
            
            printf( '<div class="notice notice-warning"><p>%s</p></div>', $message );
        }

        // Sucesso após update
        if ( isset($_GET['db_updated']) && $_GET['db_updated'] == 'true' ) {
            printf( '<div class="notice notice-success is-dismissible"><p>Base de Dados do 1MZ For Artists atualizada com sucesso!</p></div>' );
        }
    }
}
add_action('admin_notices', 'rmbz_mostrar_avisos_gerais');
