<?php
/**
 * includes/first-deposit-gate.php
 *
 * ============================================================================
 * FIRST DEPOSIT GATE — 1.5.127
 * ============================================================================
 *
 * Quando um artista cria conta nova (sem cupão), o sistema cria simultaneamente:
 *   1. Linha em `rmbz_wallets` (a conta)
 *   2. Linha em `rmbz_deposit_requests` (o pagamento da subscrição/inscrição)
 *
 * Até o admin aprovar esse depósito, a conta está em "limbo": existe mas não
 * tem subscrição activa. Antes desta versão, o utilizador via o paywall normal
 * (mesmo do utilizador cuja subscrição expirou) — confuso, porque ele nem
 * sequer activou a conta uma vez.
 *
 * Esta versão introduz um GATE específico para este estado de "first deposit
 * pending", com:
 *   - Detecção: `rmbz_user_has_pending_first_deposit()` — verdadeiro quando
 *     a conta existe, tem deposit pendente, NUNCA teve aprovado, e NUNCA
 *     teve subscrição activa
 *   - Bloqueio total: gate full-screen com instruções de pagamento, contador
 *     de tempo restante (24h após `request_date`), e instruções de fallback
 *   - Cleanup automático: cron existente já apaga depósitos pendentes >24h.
 *     Aqui complementamos: também apagamos a CONTA quando o cleanup detectar
 *     que era um first-deposit (e não um top-up posterior)
 *
 * REGRA DE OURO: o gate só bloqueia *first deposit*. Se o utilizador depois
 * de activar quiser fazer outro depósito (top-up), esse depósito pendente
 * NÃO deve bloquear a conta inteira — apenas a funcionalidade que precise
 * desse saldo. Por isso a heurística verifica histórico de depósitos
 * aprovados / subscrições activas.
 */

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


/**
 * Verifica se o utilizador está em estado "first deposit pendente".
 *
 * @param string $telemovel
 * @return array|false False se não estiver nesse estado.
 *                     Array com detalhes do depósito se estiver:
 *                     [
 *                       'deposit_id' => int,
 *                       'amount' => float,
 *                       'method' => string,
 *                       'request_date' => string,
 *                       'expires_at' => string (mysql datetime),
 *                       'seconds_remaining' => int,
 *                     ]
 */
function rmbz_user_has_pending_first_deposit( $telemovel ) {
    if ( empty($telemovel) ) return false;

    global $wpdb;
    $table_wallets  = $wpdb->prefix . 'rmbz_wallets';
    $table_deposits = $wpdb->prefix . 'rmbz_deposit_requests';
    $table_subs     = $wpdb->prefix . 'rmbz_subscriptions';

    // 1. Conta tem que existir
    $exists = (int) $wpdb->get_var( $wpdb->prepare(
        "SELECT COUNT(*) FROM $table_wallets WHERE user_telemovel = %s",
        $telemovel
    ) );
    if ( ! $exists ) return false;

    // 2. NUNCA teve depósito aprovado (se já aprovou um, não é first-deposit)
    $approved_count = (int) $wpdb->get_var( $wpdb->prepare(
        "SELECT COUNT(*) FROM $table_deposits
         WHERE user_telemovel = %s AND status = 'aprovado'",
        $telemovel
    ) );
    if ( $approved_count > 0 ) return false;

    // 3. NUNCA teve subscrição activa (se usou cupão, também não é first-deposit)
    if ( $wpdb->get_var( "SHOW TABLES LIKE '$table_subs'" ) === $table_subs ) {
        $sub_count = (int) $wpdb->get_var( $wpdb->prepare(
            "SELECT COUNT(*) FROM $table_subs WHERE user_telemovel = %s",
            $telemovel
        ) );
        if ( $sub_count > 0 ) return false;
    }

    // 4. Tem depósito pendente?
    $deposit = $wpdb->get_row( $wpdb->prepare(
        "SELECT id, amount, payment_method, transaction_id, sender_phone, request_date
         FROM $table_deposits
         WHERE user_telemovel = %s AND status = 'pendente'
         ORDER BY id DESC LIMIT 1",
        $telemovel
    ) );
    if ( ! $deposit ) return false;

    // 5. Calcular tempo restante (24h após request_date)
    $request_ts = strtotime( $deposit->request_date );
    if ( ! $request_ts ) {
        // Data corrupta — fail safe: tratar como expirado
        return [
            'deposit_id'        => (int) $deposit->id,
            'amount'            => (float) $deposit->amount,
            'method'            => $deposit->payment_method,
            'transaction_id'    => $deposit->transaction_id,
            'sender_phone'      => $deposit->sender_phone,
            'request_date'      => $deposit->request_date,
            'expires_at'        => $deposit->request_date,
            'seconds_remaining' => 0,
        ];
    }
    $expires_ts = $request_ts + (24 * 3600);
    $now_ts     = current_time('timestamp', 1); // GMT — request_date é GMT
    $seconds_remaining = max( 0, $expires_ts - $now_ts );

    return [
        'deposit_id'        => (int) $deposit->id,
        'amount'            => (float) $deposit->amount,
        'method'            => $deposit->payment_method,
        'transaction_id'    => $deposit->transaction_id,
        'sender_phone'      => $deposit->sender_phone,
        'request_date'      => $deposit->request_date,
        'expires_at'        => date('Y-m-d H:i:s', $expires_ts),
        'seconds_remaining' => $seconds_remaining,
    ];
}


/**
 * Renderiza o gate full-screen quando o utilizador está em first-deposit
 * pending. Função independente — pode ser chamada em qualquer ponto de
 * entrada (área do artista, página de distribuição, etc).
 *
 * @param array $info Resultado de rmbz_user_has_pending_first_deposit()
 * @return void Imprime HTML directamente.
 */
function rmbz_render_first_deposit_gate( $info ) {
    $hours_remaining   = floor( $info['seconds_remaining'] / 3600 );
    $minutes_remaining = floor( ($info['seconds_remaining'] % 3600) / 60 );

    // Determinar cor do badge consoante tempo restante
    if ( $info['seconds_remaining'] <= 3600 ) {
        $time_class = 'rmbz-fdg-time--critical'; // < 1h
    } elseif ( $info['seconds_remaining'] <= 6 * 3600 ) {
        $time_class = 'rmbz-fdg-time--warning'; // < 6h
    } else {
        $time_class = 'rmbz-fdg-time--ok';
    }

    // [1.5.129] Contactos de suporte vêm das settings do plugin.
    // Antes estavam hardcoded ("+258 84 0000000" + admin_email do WP).
    // Agora cada um pode ser configurado em Settings → 1MZ → "Inscrição
    // Inicial e Contactos de Suporte". Se WhatsApp for vazio, o botão
    // não é mostrado. Email cai no admin_email do WP como fallback.
    $support_whatsapp = trim( (string) get_option('rmbz_support_whatsapp', '') );
    $support_email    = trim( (string) get_option('rmbz_support_email', '') );
    if ( empty($support_email) ) {
        $support_email = get_option('admin_email');
    }
    // Para o link wa.me precisamos só de dígitos.
    $whatsapp_digits = preg_replace('/\D/', '', $support_whatsapp);

    ?>
    <div class="rmbz-fdg-overlay">
        <div class="rmbz-fdg-card">

            <div class="rmbz-fdg-header">
                <div class="rmbz-fdg-icon">⏳</div>
                <h1>Aguardando confirmação do pagamento</h1>
                <p class="rmbz-fdg-sub">A tua conta foi criada. Falta só confirmarmos o pagamento.</p>
            </div>

            <div class="rmbz-fdg-body">

                <div class="rmbz-fdg-info-grid">
                    <div class="rmbz-fdg-info-item">
                        <span class="rmbz-fdg-label">Valor pago</span>
                        <span class="rmbz-fdg-value rmbz-fdg-value--strong">
                            <?php echo esc_html( number_format($info['amount'], 2, ',', '.') ); ?> MT
                        </span>
                    </div>
                    <div class="rmbz-fdg-info-item">
                        <span class="rmbz-fdg-label">Método</span>
                        <span class="rmbz-fdg-value">
                            <?php echo esc_html( $info['method'] ?: '—' ); ?>
                        </span>
                    </div>
                    <?php if ( ! empty($info['transaction_id']) ): ?>
                    <div class="rmbz-fdg-info-item">
                        <span class="rmbz-fdg-label">ID Transacção</span>
                        <span class="rmbz-fdg-value rmbz-fdg-value--mono">
                            <?php echo esc_html( $info['transaction_id'] ); ?>
                        </span>
                    </div>
                    <?php endif; ?>
                    <?php if ( ! empty($info['sender_phone']) ): ?>
                    <div class="rmbz-fdg-info-item">
                        <span class="rmbz-fdg-label">Tel. emissor</span>
                        <span class="rmbz-fdg-value rmbz-fdg-value--mono">
                            <?php echo esc_html( $info['sender_phone'] ); ?>
                        </span>
                    </div>
                    <?php endif; ?>
                </div>

                <?php if ( $info['seconds_remaining'] > 0 ): ?>
                    <div class="rmbz-fdg-time <?php echo esc_attr($time_class); ?>">
                        <strong>⏱ Tempo restante para confirmação:</strong>
                        <span class="rmbz-fdg-time-value" data-expires="<?php echo (int) $info['seconds_remaining']; ?>">
                            <?php
                            if ( $hours_remaining > 0 ) {
                                echo (int) $hours_remaining . 'h ' . (int) $minutes_remaining . 'min';
                            } else {
                                echo (int) $minutes_remaining . ' minuto' . ($minutes_remaining === 1.0 ? '' : 's');
                            }
                            ?>
                        </span>
                    </div>
                    <p class="rmbz-fdg-warning">
                        Se não validarmos o pagamento dentro deste prazo, a conta e o pedido serão automaticamente
                        eliminados. Terás de te registar novamente.
                    </p>
                <?php else: ?>
                    <div class="rmbz-fdg-time rmbz-fdg-time--expired">
                        <strong>⚠ Prazo expirado</strong>
                        Esta conta vai ser apagada na próxima limpeza automática.
                    </div>
                <?php endif; ?>

                <div class="rmbz-fdg-section">
                    <h3>O que está a acontecer agora?</h3>
                    <ol class="rmbz-fdg-steps">
                        <li>A nossa equipa está a verificar o teu pagamento.</li>
                        <li>Quando confirmarmos, a tua conta é activada automaticamente e podes começar a usar a plataforma.</li>
                        <li>Recebes notificação por SMS ou email assim que estiver tudo certo.</li>
                    </ol>
                </div>

                <div class="rmbz-fdg-section rmbz-fdg-section--help">
                    <h3>Ainda não pagaste?</h3>
                    <p>
                        Faz a transferência o mais rápido possível usando o método que escolheste no registo.
                        O nosso prazo de confirmação é até <strong>24 horas</strong> após o registo.
                    </p>

                    <h3>Já pagaste mas não vês alteração?</h3>
                    <p>
                        Não te preocupes — confirmamos manualmente cada pagamento. Pode demorar até algumas horas
                        em horário comercial. Se demorar muito, contacta-nos:
                    </p>
                    <div class="rmbz-fdg-contact">
                        <?php if ( ! empty($whatsapp_digits) ): ?>
                            <a href="https://wa.me/<?php echo esc_attr($whatsapp_digits); ?>"
                               class="rmbz-fdg-btn rmbz-fdg-btn--whatsapp" target="_blank" rel="noopener">
                                💬 WhatsApp: <?php echo esc_html($support_whatsapp); ?>
                            </a>
                        <?php endif; ?>
                        <a href="mailto:<?php echo esc_attr($support_email); ?>"
                           class="rmbz-fdg-btn">
                            ✉ <?php echo esc_html($support_email); ?>
                        </a>
                    </div>
                </div>

                <div class="rmbz-fdg-actions">
                    <?php
                    $logout_url = wp_nonce_url(
                        admin_url('admin-post.php?action=rmbz_logout'),
                        'rmbz_logout_nonce'
                    );
                    ?>
                    <a href="<?php echo esc_url($logout_url); ?>" class="rmbz-fdg-btn rmbz-fdg-btn--ghost">
                        Sair / Voltar mais tarde
                    </a>
                </div>

            </div>

        </div>
    </div>

    <style>
        .rmbz-fdg-overlay {
            min-height:100vh;
            background:linear-gradient(180deg, #111 0%, #0a0a0a 100%);
            padding:24px 16px;
            display:flex; align-items:flex-start; justify-content:center;
            box-sizing:border-box;
        }
        .rmbz-fdg-card {
            max-width:680px; width:100%;
            background:#1a1a1a;
            border:1px solid #2a2a2a;
            border-radius:16px;
            overflow:hidden;
            box-shadow:0 20px 60px rgba(0,0,0,0.5);
            color:#eee;
            font-family:-apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
        }
        .rmbz-fdg-header {
            padding:32px 28px 24px;
            background:linear-gradient(135deg, #f0b90b 0%, #d4a30a 100%);
            color:#1a1a1a;
            text-align:center;
        }
        .rmbz-fdg-icon {
            font-size:48px;
            margin-bottom:8px;
        }
        .rmbz-fdg-header h1 {
            margin:0 0 6px;
            font-size:22px; font-weight:700;
            line-height:1.25;
        }
        .rmbz-fdg-sub { margin:0; font-size:14px; opacity:0.85; }

        .rmbz-fdg-body { padding:28px; }

        .rmbz-fdg-info-grid {
            display:grid;
            grid-template-columns:1fr 1fr;
            gap:14px 18px;
            background:#222;
            padding:16px;
            border-radius:10px;
            margin-bottom:20px;
        }
        @media (max-width: 480px) {
            .rmbz-fdg-info-grid { grid-template-columns:1fr; }
        }
        .rmbz-fdg-info-item { display:flex; flex-direction:column; gap:4px; min-width:0; }
        .rmbz-fdg-label {
            font-size:11px; font-weight:600;
            color:#888;
            text-transform:uppercase;
            letter-spacing:0.06em;
        }
        .rmbz-fdg-value {
            font-size:14px; color:#eee;
            word-break:break-word;
        }
        .rmbz-fdg-value--strong { font-size:18px; font-weight:700; color:#f0b90b; }
        .rmbz-fdg-value--mono {
            font-family:ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
            font-size:13px;
        }

        .rmbz-fdg-time {
            padding:16px 20px;
            border-radius:10px;
            margin-bottom:14px;
            display:flex; flex-wrap:wrap; gap:8px; align-items:center; justify-content:space-between;
            font-size:14px;
            border:1px solid;
        }
        .rmbz-fdg-time--ok       { background:rgba(46,204,113,0.10); border-color:rgba(46,204,113,0.3); color:#9be7b8; }
        .rmbz-fdg-time--warning  { background:rgba(240,185,11,0.10); border-color:rgba(240,185,11,0.4); color:#f5d97a; }
        .rmbz-fdg-time--critical { background:rgba(231,76,60,0.12); border-color:rgba(231,76,60,0.4); color:#ffb3ad; }
        .rmbz-fdg-time--expired  { background:rgba(231,76,60,0.18); border-color:rgba(231,76,60,0.5); color:#ffb3ad; }
        .rmbz-fdg-time-value { font-size:18px; font-weight:700; font-variant-numeric:tabular-nums; }

        .rmbz-fdg-warning {
            font-size:12.5px; color:#aaa;
            margin:0 0 24px; line-height:1.55;
            padding:0 4px;
        }

        .rmbz-fdg-section {
            margin-top:24px; padding-top:20px;
            border-top:1px solid #2a2a2a;
        }
        .rmbz-fdg-section h3 {
            margin:0 0 8px;
            font-size:14px; font-weight:600;
            color:#fff;
        }
        .rmbz-fdg-section--help h3 { margin-top:14px; }
        .rmbz-fdg-section p {
            margin:0 0 10px;
            font-size:13px; line-height:1.55; color:#bbb;
        }
        .rmbz-fdg-section strong { color:#f0b90b; }
        .rmbz-fdg-steps {
            margin:0; padding-left:22px;
            font-size:13px; line-height:1.7; color:#bbb;
        }
        .rmbz-fdg-steps li { margin-bottom:4px; }

        .rmbz-fdg-contact {
            display:flex; flex-wrap:wrap; gap:8px;
            margin-top:14px;
        }
        .rmbz-fdg-btn {
            display:inline-flex; align-items:center; gap:6px;
            padding:10px 16px;
            border-radius:8px;
            border:1px solid #444;
            background:#222; color:#eee;
            font-size:13px; font-weight:500;
            text-decoration:none;
            cursor:pointer;
            transition:all 0.15s;
            font-family:inherit;
        }
        .rmbz-fdg-btn:hover { background:#2a2a2a; border-color:#666; }
        .rmbz-fdg-btn--whatsapp {
            background:#25d366; color:#fff; border-color:#25d366;
        }
        .rmbz-fdg-btn--whatsapp:hover { background:#1ea854; border-color:#1ea854; }
        .rmbz-fdg-btn--ghost {
            background:transparent; color:#888;
        }
        .rmbz-fdg-btn--ghost:hover { color:#ccc; background:transparent; border-color:#666; }

        .rmbz-fdg-actions {
            margin-top:24px; padding-top:20px;
            border-top:1px solid #2a2a2a;
            text-align:center;
        }
    </style>

    <script>
    /* [1.5.127] Countdown live no gate de first-deposit. Atualiza a cada
       minuto. Quando chegar a zero, recarrega a página (que vai mostrar
       o estado de "expirado" ou redireccionar consoante a próxima limpeza
       de cron). */
    (function(){
        var el = document.querySelector('.rmbz-fdg-time-value');
        if (!el) return;
        var seconds = parseInt(el.getAttribute('data-expires'), 10);
        if (isNaN(seconds)) return;
        if (seconds <= 0) return;

        function format(s) {
            if (s <= 0) return '0 minutos';
            var h = Math.floor(s / 3600);
            var m = Math.floor((s % 3600) / 60);
            if (h > 0) return h + 'h ' + m + 'min';
            return m + ' minuto' + (m === 1 ? '' : 's');
        }
        function tick() {
            seconds -= 60;
            if (seconds <= 0) {
                el.textContent = '0 minutos';
                location.reload();
                return;
            }
            el.textContent = format(seconds);
        }
        setInterval(tick, 60 * 1000);
    })();
    </script>
    <?php
}


/**
 * Helper de bloqueio: chama no início dos shortcodes/páginas que devem
 * ser bloqueados. Devolve true se bloqueou (e renderizou o gate); o
 * caller deve dar `return` ou `exit` imediatamente após.
 *
 * Uso:
 *   if ( rmbz_first_deposit_gate_block_if_needed() ) return ob_get_clean();
 *
 * @return bool
 */
function rmbz_first_deposit_gate_block_if_needed() {
    if ( ! function_exists('rmbz_get_current_user_telemovel') ) return false;
    $tel = rmbz_get_current_user_telemovel();
    if ( empty($tel) ) return false;

    $info = rmbz_user_has_pending_first_deposit( $tel );
    if ( empty($info) ) return false;

    // [1.5.130] Limpar notice de sessão "Conta criada... pagamento em análise"
    // ANTES de renderizar o gate. Razão: o form-handler set essa notice ao
    // registar; mas como o gate intercepta o dashboard (return early) a
    // notice nunca era consumida. Resultado: ficava em sessão e aparecia
    // como popup obsoleto DEPOIS do admin aprovar o depósito (quando o
    // gate finalmente para de disparar).
    //
    // O gate em si já comunica claramente "Aguardando confirmação do
    // pagamento" + countdown 24h, por isso a notice é redundante.
    if ( session_status() === PHP_SESSION_ACTIVE && isset($_SESSION['rmbz_withdrawal_notice']) ) {
        $notice = $_SESSION['rmbz_withdrawal_notice'];
        // Heurística: só descartar se for a mensagem específica do registo.
        // Outras notices (ex: "PIN alterado") devem continuar a aparecer
        // depois do utilizador sair do gate. Identificamos pela substring
        // distintiva "pagamento inicial está em análise".
        $is_register_notice = is_array($notice)
            && isset($notice[1])
            && stripos((string) $notice[1], 'pagamento inicial') !== false;
        if ( $is_register_notice ) {
            unset( $_SESSION['rmbz_withdrawal_notice'] );
        }
    }

    rmbz_render_first_deposit_gate( $info );
    return true;
}


/* ============================================================================
 * CLEANUP MELHORADO — apaga conta + depósito quando expira
 * ============================================================================
 *
 * O cron `rmbz_cleanup_expired_deposits` em cron-jobs.php já apaga depósitos
 * pendentes >24h. Aqui complementamos: quando o depósito apagado era um
 * *first deposit*, também apagamos a conta correspondente (e dados extra).
 *
 * Como o cleanup actual usa DELETE directo (não dispara hooks), ligamos
 * ANTES da limpeza original para detectar quais users vão ficar órfãos
 * e processar a sua eliminação.
 *
 * Implementação: remove-se a action existente, substitui-se por uma versão
 * extendida que faz cleanup completo.
 */

/**
 * Versão extendida do cleanup. Substitui rmbz_cleanup_expired_deposits.
 */
function rmbz_first_deposit_cleanup_extended() {
    global $wpdb;
    $table_deposits     = $wpdb->prefix . 'rmbz_deposit_requests';
    $table_wallets      = $wpdb->prefix . 'rmbz_wallets';
    $table_subs         = $wpdb->prefix . 'rmbz_subscriptions';
    $table_transactions = $wpdb->prefix . 'rmbz_wallet_transactions';

    // 1. Listar depósitos pendentes que vão ser apagados (>24h).
    // Capturamos os user_telemovel ANTES do delete, para depois decidir
    // se a conta é candidata a apagar.
    $expired = $wpdb->get_results(
        "SELECT id, user_telemovel
         FROM $table_deposits
         WHERE status = 'pendente'
           AND request_date <= DATE_SUB(NOW(), INTERVAL 24 HOUR)"
    );

    if ( empty($expired) ) return;

    $candidates = []; // user_telemovel => true
    $deposit_ids = [];
    foreach ( $expired as $row ) {
        $candidates[ $row->user_telemovel ] = true;
        $deposit_ids[] = (int) $row->id;
    }

    // 2. Apagar os depósitos (igual à versão original).
    if ( ! empty($deposit_ids) ) {
        $ids_placeholder = implode(',', array_fill(0, count($deposit_ids), '%d'));
        $wpdb->query( $wpdb->prepare(
            "DELETE FROM $table_deposits WHERE id IN ($ids_placeholder)",
            ...$deposit_ids
        ) );
    }

    // 3. Para cada candidato, verificar se era first-deposit e, se sim,
    // apagar a conta. Critérios cumulativos:
    //    - Não tem mais nenhum depósito (já apagámos os pendentes)
    //    - Nunca teve depósito aprovado
    //    - Nunca teve subscrição
    //    - Saldo zero (defesa em profundidade)
    //    - Sem transações (defesa em profundidade)
    foreach ( array_keys($candidates) as $tel ) {
        // Resta algum depósito (aprovado/rejeitado)?
        $any_deposit = (int) $wpdb->get_var( $wpdb->prepare(
            "SELECT COUNT(*) FROM $table_deposits WHERE user_telemovel = %s",
            $tel
        ) );
        if ( $any_deposit > 0 ) continue; // tem histórico — não apaga

        // Já teve subscrição alguma vez?
        $had_sub = 0;
        if ( $wpdb->get_var( "SHOW TABLES LIKE '$table_subs'" ) === $table_subs ) {
            $had_sub = (int) $wpdb->get_var( $wpdb->prepare(
                "SELECT COUNT(*) FROM $table_subs WHERE user_telemovel = %s",
                $tel
            ) );
        }
        if ( $had_sub > 0 ) continue;

        // Defesa em profundidade: saldo deve ser zero
        $balance = (float) $wpdb->get_var( $wpdb->prepare(
            "SELECT balance FROM $table_wallets WHERE user_telemovel = %s",
            $tel
        ) );
        if ( $balance > 0.0001 ) continue; // tem saldo — algo estranho, não apaga

        // Defesa em profundidade: sem histórico de transações
        $tx_count = 0;
        if ( $wpdb->get_var( "SHOW TABLES LIKE '$table_transactions'" ) === $table_transactions ) {
            $tx_count = (int) $wpdb->get_var( $wpdb->prepare(
                "SELECT COUNT(*) FROM $table_transactions WHERE user_telemovel = %s",
                $tel
            ) );
        }
        if ( $tx_count > 0 ) continue;

        // Apagar conta
        $wpdb->delete( $table_wallets, [ 'user_telemovel' => $tel ], [ '%s' ] );

        // Hook para outros módulos limparem dados associados
        do_action( 'rmbz_first_deposit_account_purged', $tel );
    }
}

/* Substituir a action original do cron. */
add_action( 'init', function() {
    if ( has_action('rmbz_unlock_funds_hook', 'rmbz_cleanup_expired_deposits') ) {
        remove_action( 'rmbz_unlock_funds_hook', 'rmbz_cleanup_expired_deposits' );
    }
    add_action( 'rmbz_unlock_funds_hook', 'rmbz_first_deposit_cleanup_extended' );
}, 20 );


/* ============================================================================
 * REJEIÇÃO MANUAL pelo admin: apagar conta se era first-deposit
 * ============================================================================
 *
 * O handler existente `rmbz_processar_rejeicao_deposito` em admin-handlers.php
 * (linha 402) já faz cleanup defensivo: se a conta tem balance=0 e zero
 * transações, apaga. Isto cobre o nosso caso de first-deposit rejeitado.
 *
 * Mas adicionamos um complemento: garantir que também apagamos a wallet
 * mesmo que outras tabelas existam (ex: extra_data, sessions). Ligamos
 * via hook ao processo de rejeição.
 *
 * Não modificamos o handler original — preferimos extensão por hook para
 * preservar a lógica existente intacta.
 */
add_action( 'admin_post_rmbz_reject_deposit', function() {
    // Esta função corre ANTES do handler original (priority padrão = 10).
    // Capturamos o user_telemovel para decisão posterior.
    if ( ! isset($_GET['dep_id']) ) return;

    global $wpdb;
    $dep_id = absint( $_GET['dep_id'] );
    $tel = $wpdb->get_var( $wpdb->prepare(
        "SELECT user_telemovel FROM {$wpdb->prefix}rmbz_deposit_requests WHERE id = %d",
        $dep_id
    ) );
    if ( empty($tel) ) return;

    // Marcar para processamento depois (via global; não usamos transients para
    // não persistir entre requests — esta é uma execução curta).
    $GLOBALS['rmbz_pending_first_deposit_purge'] = $tel;
}, 5 ); // priority < 10 para correr ANTES do handler original

/* Hook depois da rejeição: se a flag está set, verifica e limpa.
   Como o handler original faz wp_redirect+exit, este código só corre se
   houver alguma falha na rejeição — fica como defesa de retaguarda. */
add_action( 'shutdown', function() {
    if ( empty( $GLOBALS['rmbz_pending_first_deposit_purge'] ) ) return;
    // Por agora não fazemos nada — confiamos no cleanup defensivo do handler
    // original em admin-handlers.php:432 (que apaga wallet se balance=0 e
    // zero transactions). Esta hook fica registada para futuro uso.
} );
