<?php
/**
 * [1.5.219] App Promo + Página de Download do APK
 *
 * Enquanto a app está em verificação na Play Store, oferecemos download
 * directo do APK. Este ficheiro trata de:
 *
 *   1. UPLOAD DO APK — campo na página admin "Versão da App"
 *   2. PÁGINA DE DOWNLOAD — shortcode [1mz_app_download] público
 *   3. POP-UP DE RECOMENDAÇÃO — banner inferior nas páginas oficiais
 *      do plugin (Minha Conta, Área de Artista, Distribuição)
 *   4. ENDPOINT DE DOWNLOAD — serve o .apk com headers correctos
 *
 * Reutiliza as options já existentes do Controlo de Versão:
 *   rmbz_app_latest_version, rmbz_app_latest_version_code, rmbz_app_changelog
 */

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

// Options próprias desta feature
const RMBZ_APP_OPT_APK_URL          = 'rmbz_app_apk_url';
const RMBZ_APP_OPT_APK_FILE         = 'rmbz_app_apk_file';     // path absoluto
const RMBZ_APP_OPT_APK_SIZE         = 'rmbz_app_apk_size';     // bytes
const RMBZ_APP_OPT_APK_UPLOADED_AT  = 'rmbz_app_apk_uploaded_at';
const RMBZ_APP_OPT_APK_DOWNLOADS    = 'rmbz_app_apk_downloads'; // contador
const RMBZ_APP_OPT_PROMO_ENABLED    = 'rmbz_app_promo_enabled'; // pop-up on/off

// [1.5.221] Modo de distribuição:
//   'apk'       → download directo do .apk (app ainda não na Play Store)
//   'playstore' → redirecciona para a Play Store
const RMBZ_APP_OPT_DIST_MODE        = 'rmbz_app_dist_mode';
const RMBZ_APP_OPT_PLAYSTORE_URL    = 'rmbz_app_playstore_url';

/**
 * [1.5.221] Devolve o modo de distribuição actual: 'apk' ou 'playstore'.
 */
function rmbz_app_dist_mode() {
    $mode = get_option( RMBZ_APP_OPT_DIST_MODE, 'apk' );
    return ( $mode === 'playstore' ) ? 'playstore' : 'apk';
}

/**
 * [1.5.221] Devolve o link final para onde o utilizador deve ir,
 * conforme o modo de distribuição.
 *   - modo playstore → URL da Play Store
 *   - modo apk       → página de download interna
 */
function rmbz_app_get_install_url() {
    if ( rmbz_app_dist_mode() === 'playstore' ) {
        $url = get_option( RMBZ_APP_OPT_PLAYSTORE_URL, '' );
        if ( $url ) return $url;
    }
    return rmbz_app_get_download_page_url();
}

/* =====================================================================
 * 1. PASTA SEGURA PARA O APK
 * ===================================================================== */

/**
 * Devolve o caminho da pasta onde o APK é guardado.
 * Cria a pasta se não existir, com .htaccess que permite download directo
 * mas bloqueia listagem.
 */
function rmbz_app_apk_dir() {
    $upload = wp_upload_dir();
    $dir = trailingslashit( $upload['basedir'] ) . '1mz-app';
    if ( ! file_exists( $dir ) ) {
        wp_mkdir_p( $dir );
        // .htaccess — permite servir .apk mas não listar a pasta
        $htaccess = $dir . '/.htaccess';
        if ( ! file_exists( $htaccess ) ) {
            file_put_contents( $htaccess, "Options -Indexes\n" );
        }
    }
    return $dir;
}

/* =====================================================================
 * 2. HANDLER DE UPLOAD DO APK (chamado da página admin)
 * ===================================================================== */

/**
 * Processa o upload do APK a partir do formulário admin.
 * Deve ser chamado dentro de rmbz_app_version_render_page().
 */
function rmbz_app_handle_apk_upload() {
    if ( ! isset( $_POST['rmbz_app_apk_upload'] ) ) return;
    if ( ! check_admin_referer( 'rmbz_app_apk_upload', 'rmbz_app_apk_nonce' ) ) return;
    if ( ! current_user_can( 'manage_options' ) ) return;

    if ( empty( $_FILES['apk_file'] ) || ! empty( $_FILES['apk_file']['error'] ) ) {
        echo '<div class="notice notice-error is-dismissible"><p>⚠️ ' .
             'Nenhum ficheiro carregado ou erro no upload.</p></div>';
        return;
    }

    $file = $_FILES['apk_file'];

    // Validar extensão
    $ext = strtolower( pathinfo( $file['name'], PATHINFO_EXTENSION ) );
    if ( $ext !== 'apk' ) {
        echo '<div class="notice notice-error is-dismissible"><p>⚠️ ' .
             'O ficheiro tem de ser um .apk válido.</p></div>';
        return;
    }

    // Validar tamanho (máx 200MB — APKs podem ser grandes)
    if ( (int) $file['size'] > 200 * 1024 * 1024 ) {
        echo '<div class="notice notice-error is-dismissible"><p>⚠️ ' .
             'APK demasiado grande (máx 200MB).</p></div>';
        return;
    }
    if ( (int) $file['size'] < 100 * 1024 ) {
        echo '<div class="notice notice-error is-dismissible"><p>⚠️ ' .
             'APK demasiado pequeno — ficheiro corrupto?</p></div>';
        return;
    }

    // Validar assinatura ZIP (APK é um ZIP — começa com "PK")
    $fh = fopen( $file['tmp_name'], 'rb' );
    $magic = $fh ? fread( $fh, 2 ) : '';
    if ( $fh ) fclose( $fh );
    if ( $magic !== 'PK' ) {
        echo '<div class="notice notice-error is-dismissible"><p>⚠️ ' .
             'O ficheiro não parece ser um APK válido.</p></div>';
        return;
    }

    $dir = rmbz_app_apk_dir();

    // [1.5.220] Limpeza TOTAL — apaga QUALQUER .apk que esteja na pasta,
    // não só o registado na option. Garante que não ficam ficheiros
    // órfãos a ocupar espaço (ex: uploads falhados, nomes antigos).
    $old_apks = glob( trailingslashit( $dir ) . '*.apk' );
    if ( is_array( $old_apks ) ) {
        foreach ( $old_apks as $old_apk ) {
            @unlink( $old_apk );
        }
    }

    // Nome fixo + timestamp para forçar refresh de cache no browser
    $dest_name = '1mz-for-artists.apk';
    $dest = trailingslashit( $dir ) . $dest_name;

    if ( ! move_uploaded_file( $file['tmp_name'], $dest ) ) {
        echo '<div class="notice notice-error is-dismissible"><p>⚠️ ' .
             'Falha ao guardar o APK no servidor.</p></div>';
        return;
    }

    $upload = wp_upload_dir();
    $url = trailingslashit( $upload['baseurl'] ) . '1mz-app/' . $dest_name;

    update_option( RMBZ_APP_OPT_APK_URL,         esc_url_raw( $url ) );
    update_option( RMBZ_APP_OPT_APK_FILE,        $dest );
    update_option( RMBZ_APP_OPT_APK_SIZE,        (int) $file['size'] );
    update_option( RMBZ_APP_OPT_APK_UPLOADED_AT, current_time( 'mysql' ) );

    echo '<div class="notice notice-success is-dismissible"><p>✅ ' .
         'APK carregado com sucesso (' . size_format( (int) $file['size'] ) .
         '). Já está disponível na página de download.</p></div>';
}

/* =====================================================================
 * 3. ENDPOINT DE DOWNLOAD — serve o APK com headers correctos
 * ===================================================================== */

/**
 * Regista a query var ?rmbz_download_apk=1 para servir o APK.
 * Usar URL: home_url('/?rmbz_download_apk=1')
 */
add_action( 'init', function () {
    add_rewrite_tag( '%rmbz_download_apk%', '1' );
} );

add_action( 'template_redirect', function () {
    if ( ! get_query_var( 'rmbz_download_apk' ) &&
         ! isset( $_GET['rmbz_download_apk'] ) ) {
        return;
    }

    $file = get_option( RMBZ_APP_OPT_APK_FILE, '' );
    if ( ! $file || ! file_exists( $file ) ) {
        status_header( 404 );
        wp_die( 'APK ainda não disponível. Volte mais tarde.' );
    }

    // Incrementar contador
    $downloads = (int) get_option( RMBZ_APP_OPT_APK_DOWNLOADS, 0 );
    update_option( RMBZ_APP_OPT_APK_DOWNLOADS, $downloads + 1 );

    // Servir o ficheiro com headers de download de APK
    $version = get_option( RMBZ_APP_OPT_LATEST_VERSION, '1.0.0' );
    $filename = '1MZ-For-Artists-v' . $version . '.apk';

    nocache_headers();
    header( 'Content-Type: application/vnd.android.package-archive' );
    header( 'Content-Disposition: attachment; filename="' . $filename . '"' );
    header( 'Content-Length: ' . filesize( $file ) );
    header( 'X-Content-Type-Options: nosniff' );

    // Limpar buffers antes de enviar o ficheiro
    if ( ob_get_level() ) ob_end_clean();
    readfile( $file );
    exit;
} );

/**
 * [1.5.222] Normaliza o changelog para um array de linhas.
 *
 * O changelog é guardado pelo admin (app-version-control.php) como
 * JSON array — wp_json_encode(['Versão inicial', 'Fix do login', ...]).
 *
 * Esta função aceita qualquer formato e devolve sempre array de strings:
 *   - JSON array  → descodifica
 *   - Texto solto → divide por linhas
 *   - Vazio       → array vazio
 */
function rmbz_app_changelog_lines() {
    $raw = get_option( RMBZ_APP_OPT_CHANGELOG, '' );
    if ( empty( $raw ) ) return [];

    // Tentar descodificar como JSON (formato gravado pelo admin)
    if ( is_string( $raw ) ) {
        $decoded = json_decode( $raw, true );
        if ( is_array( $decoded ) ) {
            return array_values( array_filter( array_map( 'trim', $decoded ) ) );
        }
        // Não era JSON — tratar como texto, dividir por linhas
        $lines = preg_split( '/\r\n|\n|\r/', $raw );
        return array_values( array_filter( array_map( 'trim', $lines ) ) );
    }

    if ( is_array( $raw ) ) {
        return array_values( array_filter( array_map( 'trim', $raw ) ) );
    }

    return [];
}

/* =====================================================================
 * 4. SHORTCODE [1mz_app_download] — página pública de download
 * ===================================================================== */

add_shortcode( '1mz_app_download', 'rmbz_app_download_page_shortcode' );

function rmbz_app_download_page_shortcode() {
    $version   = get_option( RMBZ_APP_OPT_LATEST_VERSION, '' );
    $code      = (int) get_option( RMBZ_APP_OPT_LATEST_CODE, 0 );
    $changelog_lines = rmbz_app_changelog_lines();
    $apk_url   = get_option( RMBZ_APP_OPT_APK_URL, '' );
    $apk_size  = (int) get_option( RMBZ_APP_OPT_APK_SIZE, 0 );
    $uploaded  = get_option( RMBZ_APP_OPT_APK_UPLOADED_AT, '' );
    $downloads = (int) get_option( RMBZ_APP_OPT_APK_DOWNLOADS, 0 );

    $download_link = home_url( '/?rmbz_download_apk=1' );

    // [1.5.221] Modo de distribuição decide o que mostrar.
    $mode          = rmbz_app_dist_mode();
    $playstore_url = get_option( RMBZ_APP_OPT_PLAYSTORE_URL, '' );
    $is_playstore  = ( $mode === 'playstore' && ! empty( $playstore_url ) );
    $has_apk       = ! empty( $apk_url );

    ob_start();
    ?>
    <div class="rmbz-apk-page">
        <div class="rmbz-apk-hero">
            <div class="rmbz-apk-icon">📱</div>
            <h1>1MZ For Artists</h1>
            <p class="rmbz-apk-tagline">A app oficial para artistas da 1MZ Records</p>

            <?php if ( $version ) : ?>
                <div class="rmbz-apk-version">
                    Versão <?php echo esc_html( $version ); ?>
                    <?php if ( $code ) : ?>
                        <span class="rmbz-apk-build">build <?php echo (int) $code; ?></span>
                    <?php endif; ?>
                </div>
            <?php endif; ?>

            <?php if ( $is_playstore ) : ?>
                <!-- [1.5.221] Modo Play Store — botão directo, sem modal/desafio -->
                <a href="<?php echo esc_url( $playstore_url ); ?>"
                   class="rmbz-apk-btn" target="_blank" rel="noopener">
                    ▶ Disponível no Google Play
                </a>
                <p class="rmbz-apk-downloads">Instala a versão oficial directamente da Play Store</p>
            <?php elseif ( $has_apk ) : ?>
                <button type="button" class="rmbz-apk-btn" id="rmbz-apk-open-modal">
                    ⬇ Baixar APK
                    <?php if ( $apk_size ) : ?>
                        <span class="rmbz-apk-size">(<?php echo esc_html( size_format( $apk_size ) ); ?>)</span>
                    <?php endif; ?>
                </button>
                <?php if ( $downloads > 0 ) : ?>
                    <p class="rmbz-apk-downloads"><?php echo number_format_i18n( $downloads ); ?> transferências</p>
                <?php endif; ?>
            <?php else : ?>
                <div class="rmbz-apk-soon">
                    A app estará disponível em breve. Volte mais tarde.
                </div>
            <?php endif; ?>
        </div>

        <?php if ( ! $is_playstore && $has_apk ) : ?>
        <!-- [1.5.220] Modal de download com apresentação + desafio anti-bot -->
        <div class="rmbz-apk-modal-overlay" id="rmbz-apk-modal" style="display:none;">
            <div class="rmbz-apk-modal">
                <button type="button" class="rmbz-apk-modal-x" id="rmbz-apk-modal-close">&times;</button>

                <div class="rmbz-apk-modal-head">
                    <div class="rmbz-apk-modal-icon">📱</div>
                    <h3>1MZ For Artists</h3>
                    <p>Estás prestes a baixar a app oficial</p>
                </div>

                <div class="rmbz-apk-modal-info">
                    <div class="rmbz-apk-info-row">
                        <span>Versão</span>
                        <strong><?php echo esc_html( $version ?: '—' ); ?><?php echo $code ? ' (build ' . (int) $code . ')' : ''; ?></strong>
                    </div>
                    <div class="rmbz-apk-info-row">
                        <span>Tamanho</span>
                        <strong><?php echo esc_html( $apk_size ? size_format( $apk_size ) : '—' ); ?></strong>
                    </div>
                    <div class="rmbz-apk-info-row">
                        <span>Atualizado</span>
                        <strong><?php echo esc_html( $uploaded ? date_i18n( 'd/m/Y', strtotime( $uploaded ) ) : '—' ); ?></strong>
                    </div>
                    <div class="rmbz-apk-info-row">
                        <span>Sistema</span>
                        <strong>Android 8.0+</strong>
                    </div>
                </div>

                <!-- Desafio matemático anti-bot -->
                <div class="rmbz-apk-challenge">
                    <label id="rmbz-apk-challenge-q">Confirma que não és um robô:</label>
                    <div class="rmbz-apk-challenge-row">
                        <span id="rmbz-apk-math"></span>
                        <input type="number" id="rmbz-apk-answer" placeholder="?" inputmode="numeric">
                    </div>
                    <p class="rmbz-apk-challenge-err" id="rmbz-apk-err" style="display:none;">
                        Resposta errada. Tenta de novo.
                    </p>
                </div>

                <a href="#" class="rmbz-apk-modal-download rmbz-apk-disabled"
                   id="rmbz-apk-confirm-download"
                   data-url="<?php echo esc_url( $download_link ); ?>">
                    ⬇ Confirmar e baixar
                </a>
            </div>
        </div>
        <?php endif; ?>

        <?php if ( $is_playstore ) : ?>
        <div class="rmbz-apk-install">
            <h2>Como instalar</h2>
            <ol>
                <li>Toca em <strong>"Disponível no Google Play"</strong> acima.</li>
                <li>Na Play Store, toca em <strong>Instalar</strong>.</li>
                <li>Aguarda o download e a instalação automática.</li>
                <li>Abre a app e entra com o teu número de telemóvel.</li>
            </ol>
        </div>
        <?php elseif ( $has_apk ) : ?>
        <div class="rmbz-apk-install">
            <h2>Como instalar</h2>
            <ol>
                <li>Toca em <strong>"Baixar APK"</strong> acima.</li>
                <li>Quando o download terminar, abre o ficheiro.</li>
                <li>O Android pode pedir para <strong>permitir instalação de fontes desconhecidas</strong> — aceita (é seguro, é a app oficial 1MZ).</li>
                <li>Toca em <strong>Instalar</strong> e aguarda.</li>
                <li>Abre a app e entra com o teu número de telemóvel.</li>
            </ol>
        </div>
        <?php endif; ?>

        <?php if ( ! empty( $changelog_lines ) ) : ?>
        <div class="rmbz-apk-changelog">
            <h2>Novidades nesta versão</h2>
            <ul class="rmbz-apk-changelog-list">
                <?php foreach ( $changelog_lines as $line ) : ?>
                    <li><?php echo esc_html( $line ); ?></li>
                <?php endforeach; ?>
            </ul>
        </div>
        <?php endif; ?>

        <div class="rmbz-apk-why">
            <h2>Porquê usar a app?</h2>
            <ul>
                <li>🎨 <strong>Tema VIP exclusivo</strong> com visual dourado</li>
                <li>⚡ <strong>Mais rápida</strong> que o site no telemóvel</li>
                <li>🔔 <strong>Notificações</strong> de relatórios e levantamentos</li>
                <li>🔐 <strong>Login com biometria</strong> (impressão digital)</li>
                <li>📊 <strong>Estatísticas detalhadas</strong> sempre à mão</li>
            </ul>
        </div>

        <p class="rmbz-apk-foot">
            1MZ Records · Maputo, Moçambique<br>
            <?php if ( $uploaded ) : ?>
                Atualizado em <?php echo esc_html( date_i18n( 'd/m/Y', strtotime( $uploaded ) ) ); ?>
            <?php endif; ?>
        </p>
    </div>

    <style>
        .rmbz-apk-page {
            max-width: 560px; margin: 0 auto; padding: 24px 16px;
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
        }
        .rmbz-apk-hero {
            text-align: center; padding: 32px 20px;
            background: linear-gradient(160deg, #1a1a1a 0%, #2a2310 60%, #3a2e08 100%);
            border-radius: 24px; color: #fff;
        }
        .rmbz-apk-icon { font-size: 56px; line-height: 1; }
        .rmbz-apk-hero h1 {
            margin: 12px 0 4px; font-size: 26px; color: #fff;
        }
        .rmbz-apk-tagline { color: #DAA520; font-size: 14px; margin: 0 0 16px; }
        .rmbz-apk-version {
            display: inline-block; background: rgba(218,165,32,0.18);
            color: #DAA520; padding: 5px 14px; border-radius: 50px;
            font-size: 13px; font-weight: 600; margin-bottom: 20px;
        }
        .rmbz-apk-build { opacity: 0.7; font-weight: 400; }
        .rmbz-apk-btn {
            display: inline-block; background: linear-gradient(135deg, #DAA520, #B8860B);
            color: #1a1a1a !important; font-weight: 700; font-size: 16px;
            padding: 16px 36px; border-radius: 50px; text-decoration: none;
            box-shadow: 0 6px 20px rgba(184,134,11,0.4);
        }
        .rmbz-apk-size { font-weight: 400; opacity: 0.7; font-size: 13px; }
        .rmbz-apk-downloads { color: #999; font-size: 12px; margin-top: 12px; }
        .rmbz-apk-soon {
            background: rgba(255,255,255,0.1); padding: 16px;
            border-radius: 12px; color: #ccc; font-size: 14px;
        }
        .rmbz-apk-install, .rmbz-apk-changelog, .rmbz-apk-why {
            margin-top: 24px; padding: 20px;
            background: #faf8f3; border-radius: 16px;
        }
        .rmbz-apk-page h2 {
            font-size: 17px; margin: 0 0 12px; color: #1a1a1a;
        }
        .rmbz-apk-install ol { margin: 0; padding-left: 20px; }
        .rmbz-apk-install li { margin-bottom: 8px; font-size: 14px; line-height: 1.5; }
        .rmbz-apk-why ul { list-style: none; margin: 0; padding: 0; }
        .rmbz-apk-why li {
            padding: 8px 0; font-size: 14px;
            border-bottom: 1px solid #ece8de;
        }
        .rmbz-apk-why li:last-child { border-bottom: none; }
        .rmbz-apk-changelog-list {
            margin: 0; padding: 0; list-style: none;
        }
        .rmbz-apk-changelog-list li {
            font-size: 14px; line-height: 1.5; color: #444;
            padding: 7px 0 7px 24px; position: relative;
            border-bottom: 1px solid #ece8de;
        }
        .rmbz-apk-changelog-list li:last-child { border-bottom: none; }
        .rmbz-apk-changelog-list li::before {
            content: "✓"; position: absolute; left: 0;
            color: #B8860B; font-weight: 700;
        }
        .rmbz-apk-foot {
            text-align: center; color: #999; font-size: 12px;
            margin-top: 24px; line-height: 1.6;
        }

        /* [1.5.220] Modal de download */
        .rmbz-apk-modal-overlay {
            position: fixed; inset: 0; z-index: 99995;
            background: rgba(0,0,0,0.6);
            display: flex; align-items: center; justify-content: center;
            padding: 16px; box-sizing: border-box;
        }
        .rmbz-apk-modal {
            background: #fff; border-radius: 22px; max-width: 380px;
            width: 100%; padding: 24px; position: relative;
            animation: rmbzModalIn 0.25s ease;
        }
        @keyframes rmbzModalIn {
            from { transform: scale(0.92); opacity: 0; }
            to   { transform: scale(1);    opacity: 1; }
        }
        .rmbz-apk-modal-x {
            position: absolute; top: 12px; right: 16px;
            background: none; border: none; font-size: 26px;
            color: #999; cursor: pointer; line-height: 1;
        }
        .rmbz-apk-modal-head { text-align: center; margin-bottom: 16px; }
        .rmbz-apk-modal-icon { font-size: 44px; }
        .rmbz-apk-modal-head h3 { margin: 6px 0 2px; font-size: 19px; color: #1a1a1a; }
        .rmbz-apk-modal-head p { margin: 0; font-size: 13px; color: #888; }
        .rmbz-apk-modal-info {
            background: #faf8f3; border-radius: 12px;
            padding: 8px 14px; margin-bottom: 16px;
        }
        .rmbz-apk-info-row {
            display: flex; justify-content: space-between;
            padding: 7px 0; font-size: 13px;
            border-bottom: 1px solid #ece8de;
        }
        .rmbz-apk-info-row:last-child { border-bottom: none; }
        .rmbz-apk-info-row span { color: #888; }
        .rmbz-apk-info-row strong { color: #1a1a1a; }
        .rmbz-apk-challenge { margin-bottom: 16px; }
        .rmbz-apk-challenge label {
            display: block; font-size: 13px; color: #555; margin-bottom: 8px;
        }
        .rmbz-apk-challenge-row {
            display: flex; align-items: center; gap: 10px;
        }
        #rmbz-apk-math {
            font-size: 18px; font-weight: 700; color: #1a1a1a;
            background: #f0ede4; padding: 8px 14px; border-radius: 10px;
            flex-shrink: 0;
        }
        #rmbz-apk-answer {
            flex: 1; font-size: 16px; padding: 9px 12px;
            border: 1.5px solid #ddd; border-radius: 10px; width: 100%;
            box-sizing: border-box;
        }
        #rmbz-apk-answer:focus { border-color: #DAA520; outline: none; }
        .rmbz-apk-challenge-err {
            color: #d92d20; font-size: 12px; margin: 8px 0 0;
        }
        .rmbz-apk-modal-download {
            display: block; text-align: center;
            background: linear-gradient(135deg, #DAA520, #B8860B);
            color: #1a1a1a !important; font-weight: 700; font-size: 15px;
            padding: 14px; border-radius: 50px; text-decoration: none;
            transition: opacity 0.2s;
        }
        .rmbz-apk-modal-download.rmbz-apk-disabled {
            opacity: 0.4; pointer-events: none;
        }
    </style>

    <?php if ( ! $is_playstore && $has_apk ) : ?>
    <script>
    (function () {
        var openBtn  = document.getElementById('rmbz-apk-open-modal');
        var modal    = document.getElementById('rmbz-apk-modal');
        var closeBtn = document.getElementById('rmbz-apk-modal-close');
        var mathEl   = document.getElementById('rmbz-apk-math');
        var answerEl = document.getElementById('rmbz-apk-answer');
        var errEl    = document.getElementById('rmbz-apk-err');
        var dlBtn    = document.getElementById('rmbz-apk-confirm-download');
        if (!openBtn || !modal) return;

        var correctAnswer = 0;

        // Gera um desafio simples de soma (números 1-9)
        function newChallenge() {
            var a = Math.floor(Math.random() * 9) + 1;
            var b = Math.floor(Math.random() * 9) + 1;
            correctAnswer = a + b;
            mathEl.textContent = a + ' + ' + b + ' =';
            answerEl.value = '';
            errEl.style.display = 'none';
            dlBtn.classList.add('rmbz-apk-disabled');
        }

        function openModal() {
            newChallenge();
            modal.style.display = 'flex';
            document.body.style.overflow = 'hidden';
        }
        function closeModal() {
            modal.style.display = 'none';
            document.body.style.overflow = '';
        }

        openBtn.addEventListener('click', openModal);
        closeBtn.addEventListener('click', closeModal);
        modal.addEventListener('click', function (e) {
            if (e.target === modal) closeModal();
        });

        // Valida a resposta em tempo real
        answerEl.addEventListener('input', function () {
            var val = parseInt(answerEl.value, 10);
            if (val === correctAnswer) {
                errEl.style.display = 'none';
                dlBtn.classList.remove('rmbz-apk-disabled');
            } else {
                dlBtn.classList.add('rmbz-apk-disabled');
            }
        });

        // Ao confirmar — revalida e inicia download
        dlBtn.addEventListener('click', function (e) {
            e.preventDefault();
            var val = parseInt(answerEl.value, 10);
            if (val !== correctAnswer) {
                errEl.style.display = 'block';
                newChallenge();  // novo desafio se errar
                return;
            }
            // Resposta certa — inicia o download
            window.location.href = dlBtn.getAttribute('data-url');
            // Fecha o modal após pequeno delay
            setTimeout(closeModal, 800);
        });
    })();
    </script>
    <?php endif; ?>
    <?php
    return ob_get_clean();
}

/* =====================================================================
 * 5. POP-UP DE RECOMENDAÇÃO — só nas páginas oficiais do plugin
 * ===================================================================== */

/**
 * Detecta se a página actual é uma página oficial do plugin
 * (contém um dos shortcodes principais).
 */
function rmbz_app_is_plugin_page() {
    if ( is_admin() ) return false;
    global $post;
    if ( ! $post instanceof WP_Post ) return false;

    $shortcodes = [ 'rmbz_minha_conta', '1mz_artist_area', '1mz_distribution_dashboard' ];
    foreach ( $shortcodes as $sc ) {
        if ( has_shortcode( $post->post_content, $sc ) ) {
            return true;
        }
    }
    return false;
}

add_action( 'wp_footer', 'rmbz_app_render_promo_popup' );

function rmbz_app_render_promo_popup() {
    // Só renderiza se: pop-up activo + página oficial
    if ( ! get_option( RMBZ_APP_OPT_PROMO_ENABLED, 1 ) ) return;
    if ( ! rmbz_app_is_plugin_page() ) return;

    // [1.5.221] Decidir destino conforme modo de distribuição.
    $mode = rmbz_app_dist_mode();
    if ( $mode === 'playstore' ) {
        // Modo Play Store — precisa de ter o link configurado
        $target = get_option( RMBZ_APP_OPT_PLAYSTORE_URL, '' );
        if ( empty( $target ) ) return; // sem link, não promove
    } else {
        // Modo APK — precisa de ter um APK carregado
        $apk_url = get_option( RMBZ_APP_OPT_APK_URL, '' );
        if ( empty( $apk_url ) ) return;
        $target = rmbz_app_get_download_page_url();
    }

    $version = get_option( RMBZ_APP_OPT_LATEST_VERSION, '' );
    ?>
    <div id="rmbz-app-promo" class="rmbz-app-promo" style="display:none;">
        <div class="rmbz-promo-inner">
            <div class="rmbz-promo-icon">📱</div>
            <div class="rmbz-promo-text">
                <strong>Melhor experiência na app!</strong>
                <span>Tema VIP, notificações e mais detalhes. Recomendamos entrar pela app 1MZ For Artists.</span>
            </div>
            <div class="rmbz-promo-actions">
                <a href="<?php echo esc_url( $target ); ?>" class="rmbz-promo-get"<?php
                    echo ( $mode === 'playstore' ) ? ' target="_blank" rel="noopener"' : ''; ?>>
                    <?php echo ( $mode === 'playstore' ) ? 'Abrir na Play Store' : 'Baixar app'; ?>
                </a>
                <button type="button" class="rmbz-promo-close" id="rmbz-promo-close">Fechar</button>
            </div>
        </div>
    </div>

    <style>
        .rmbz-app-promo {
            position: fixed; left: 0; right: 0; bottom: 0; z-index: 99990;
            padding: 12px; box-sizing: border-box;
            animation: rmbzPromoUp 0.4s ease;
        }
        @keyframes rmbzPromoUp {
            from { transform: translateY(100%); opacity: 0; }
            to   { transform: translateY(0);    opacity: 1; }
        }
        .rmbz-promo-inner {
            max-width: 520px; margin: 0 auto;
            background: linear-gradient(135deg, #1a1a1a 0%, #2a2310 100%);
            border-radius: 18px; padding: 14px 16px;
            display: flex; align-items: center; gap: 12px;
            box-shadow: 0 8px 30px rgba(0,0,0,0.4);
            border: 1px solid rgba(218,165,32,0.3);
        }
        .rmbz-promo-icon { font-size: 30px; flex-shrink: 0; }
        .rmbz-promo-text { flex: 1; min-width: 0; color: #fff; }
        .rmbz-promo-text strong {
            display: block; font-size: 14px; color: #DAA520; margin-bottom: 2px;
        }
        .rmbz-promo-text span {
            font-size: 12px; color: #ccc; line-height: 1.4; display: block;
        }
        .rmbz-promo-actions {
            display: flex; flex-direction: column; gap: 6px; flex-shrink: 0;
        }
        .rmbz-promo-get {
            background: linear-gradient(135deg, #DAA520, #B8860B);
            color: #1a1a1a !important; font-weight: 700; font-size: 13px;
            padding: 9px 16px; border-radius: 50px; text-decoration: none;
            text-align: center; white-space: nowrap;
        }
        .rmbz-promo-close {
            background: transparent; border: none; color: #888;
            font-size: 12px; padding: 4px; cursor: pointer;
        }
        @media (min-width: 768px) {
            /* O pop-up é pensado para mobile mas não escondemos no desktop —
               o teu pedido foi "nas páginas oficiais", deixamos visível.
               Se preferires só mobile, descomenta:
               .rmbz-app-promo { display: none !important; }
            */
        }
    </style>

    <script>
    (function () {
        var COOKIE = 'rmbz_app_promo_dismissed';
        function getCookie(name) {
            var m = document.cookie.match('(^|;)\\s*' + name + '\\s*=\\s*([^;]+)');
            return m ? m.pop() : '';
        }
        function setCookie(name, value, days) {
            var d = new Date();
            d.setTime(d.getTime() + days * 24 * 60 * 60 * 1000);
            document.cookie = name + '=' + value + ';expires=' + d.toUTCString() + ';path=/';
        }
        // Só mostra se não foi fechado nas últimas 24h
        if (getCookie(COOKIE) === '1') return;
        var promo = document.getElementById('rmbz-app-promo');
        if (!promo) return;
        promo.style.display = 'block';
        var closeBtn = document.getElementById('rmbz-promo-close');
        if (closeBtn) {
            closeBtn.addEventListener('click', function () {
                promo.style.display = 'none';
                setCookie(COOKIE, '1', 1); // reaparece só depois de 1 dia
            });
        }
    })();
    </script>
    <?php
}

/**
 * Tenta encontrar a página que tem o shortcode [1mz_app_download].
 * Se não existir, devolve o link directo de download.
 */
function rmbz_app_get_download_page_url() {
    $cached = get_transient( 'rmbz_app_download_page_url' );
    if ( $cached !== false ) return $cached;

    $pages = get_posts( [
        'post_type'   => 'page',
        'post_status' => 'publish',
        'numberposts' => 50,
        's'           => '1mz_app_download',
    ] );
    $url = home_url( '/?rmbz_download_apk=1' ); // fallback: download directo
    foreach ( $pages as $p ) {
        if ( has_shortcode( $p->post_content, '1mz_app_download' ) ) {
            $url = get_permalink( $p->ID );
            break;
        }
    }
    set_transient( 'rmbz_app_download_page_url', $url, HOUR_IN_SECONDS );
    return $url;
}
