<?php
/**
 * includes/enqueue.php
 *
 * Carregamento de scripts e estilos do plugin 1MZ For Artists.
 *
 * == 1.5.31 — Integração com Design System ==
 *   • rmbz_enqueue_design_system() é chamado SEMPRE que o plugin renderiza
 *     algo, antes do CSS/JS antigo. Carrega tokens, base, components, JS
 *     delegator e Google Fonts.
 *   • CSS e JS antigos continuam activos para não partir nada — vão sendo
 *     migrados peça a peça à medida que componentes forem refeitos.
 */

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

/**
 * Confirma, antes da primeira pintura, se esta página vai renderizar o painel
 * VIP. O teste precisa de viver fora de rmbz_enqueue_scripts(): wp_enqueue_scripts
 * é chamado pelo próprio wp_head e já seria tarde para registar uma prioridade 0.
 */
function rmbz_vip_preload_should_run() {
    global $post;

    if ( is_admin() || ! is_singular() || ! is_a( $post, 'WP_Post' ) ) {
        return false;
    }

    if ( ! has_shortcode( $post->post_content, 'rmbz_minha_conta' ) ) {
        return false;
    }

    if ( function_exists( 'rmbz_team_portal_current' ) && rmbz_team_portal_current() ) {
        return false;
    }

    if ( ! function_exists( 'rmbz_is_user_logged_in' ) || ! rmbz_is_user_logged_in()
        || ! function_exists( 'rmbz_get_current_user_telemovel' )
        || ! function_exists( 'rmbz_vip_is_active' )
        || ! function_exists( 'rmbz_vip_layout_on' )
        || ! function_exists( 'rmbz_vip_render_dashboard' ) ) {
        return false;
    }

    $telemovel = rmbz_get_current_user_telemovel();
    return ! empty( $telemovel )
        && rmbz_vip_is_active( $telemovel )
        && rmbz_vip_layout_on( $telemovel );
}

/**
 * Evita que o cabeçalho/menu do tema apareça entre duas rotas do painel VIP.
 * O overlay nasce no <head>; o dashboard ou o estúdio removem-no quando acabam
 * de montar. Se nenhum dos dois aparecer, o fallback liberta a página.
 */
function rmbz_vip_render_preload_guard() {
    if ( ! rmbz_vip_preload_should_run() ) {
        return;
    }

    $splash_logo = RMBZ_PLUGIN_URL . 'assets/pwa/icon-192.png';
    ?>
    <script id="rmbz-vip-preload-start">
    document.documentElement.classList.add('rmbz-vip-loading');
    try {
        if (localStorage.getItem('rmbz_vip_theme') === 'claro') {
            document.documentElement.classList.add('rmbz-vip-claro');
        }
    } catch (e) {}
    </script>
    <style id="rmbz-vip-preload">
    html.rmbz-vip-loading{background:#000;}
    html.rmbz-vip-loading.rmbz-vip-claro{background:#f6f4ee;}
    html.rmbz-vip-loading body{visibility:hidden !important;}
    html.rmbz-vip-loading #rmbz-vip,
    html.rmbz-vip-loading #rmbz-vip-studio{visibility:visible !important;}
    html.rmbz-vip-loading::before{content:'';position:fixed;inset:0;background:#000;z-index:2147483645;transition:opacity .3s;}
    html.rmbz-vip-loading.rmbz-vip-claro::before{background:#f6f4ee;}
    html.rmbz-vip-loading::after{content:'';position:fixed;left:50%;top:50%;width:92px;height:92px;margin:-46px 0 0 -46px;background:url('<?php echo esc_url( $splash_logo ); ?>') center/cover no-repeat;border-radius:50%;box-shadow:0 14px 40px rgba(0,0,0,.34);z-index:2147483646;animation:rmbzVipPulseHead 1.5s ease-in-out infinite;transition:opacity .3s;}
    @keyframes rmbzVipPulseHead{0%,100%{filter:brightness(.94);box-shadow:0 14px 40px rgba(0,0,0,.34);}50%{filter:brightness(1.08);box-shadow:0 18px 54px rgba(0,0,0,.46);}}
    html.rmbz-vip-loading.rmbz-vip-ready body{visibility:visible !important;}
    html.rmbz-vip-loading.rmbz-vip-ready::before,
    html.rmbz-vip-loading.rmbz-vip-ready::after{opacity:0;pointer-events:none;}
    </style>
    <script>
    setTimeout(function(){
        try {
            var root = document.getElementById('rmbz-vip') || document.getElementById('rmbz-vip-studio');
            if (!root) {
                document.documentElement.classList.remove('rmbz-vip-loading', 'rmbz-vip-ready');
                var style = document.getElementById('rmbz-vip-preload');
                if (style && style.parentNode) style.parentNode.removeChild(style);
            }
        } catch (e) {}
    }, 6000);
    </script>
    <?php
}
add_action( 'wp_head', 'rmbz_vip_render_preload_guard', 0 );

/**
 * ==========================================================================
 * CARREGAR SCRIPTS E ESTILOS DO FRONT-END (PÁGINAS PÚBLICAS)
 * ==========================================================================
 */
function rmbz_enqueue_scripts() {
    global $post;

    // CORREÇÃO: Assegurar que só executamos em páginas únicas para evitar que o $post aceda acidentalmente ao primeiro artigo do blog
    if ( is_singular() && is_a( $post, 'WP_Post' ) ) {

        // 1. CARREGAMENTO DA ÁREA DO ARTISTA E MINHA CONTA
        if ( has_shortcode( $post->post_content, 'rmbz_minha_conta' ) || has_shortcode( $post->post_content, '1mz_artist_area' ) ) {

            // [DS 1.5.31] Design System primeiro — para que tokens estejam
            // disponíveis quando o CSS antigo carregar. Se o utilizador já
            // estiver a usar var(--rmbz-*) em código novo, funciona.
            if ( function_exists( 'rmbz_enqueue_design_system' ) ) {
                rmbz_enqueue_design_system();
            }

            wp_enqueue_style( 'rmbz-frontend-css', RMBZ_PLUGIN_URL . 'assets/css/frontend.css', [], RMBZ_PLUGIN_VERSION );
            wp_enqueue_style( 'rmbz-account-page-css', RMBZ_PLUGIN_URL . 'assets/css/account-page.css', [], RMBZ_PLUGIN_VERSION );
            // [1.6.118.118] Material 3 (mobile-first) para a conta do artista
            wp_enqueue_style( 'rmbz-account-m3-css', RMBZ_PLUGIN_URL . 'assets/css/account-m3.css', [ 'rmbz-account-page-css' ], RMBZ_PLUGIN_VERSION );

            // [1.5.122] Fullbleed na minha conta — alarga até 1280px (mesma técnica
            // da distribuição). O CSS vive em distribution-fullbleed.css mas o nome
            // é histórico; serve para qualquer container com .rmbz-fullbleed.
            wp_enqueue_style(
                'rmbz-fullbleed-css',
                RMBZ_PLUGIN_URL . 'assets/css/distribution-fullbleed.css',
                ['rmbz-frontend-css'],
                RMBZ_PLUGIN_VERSION
            );

            // [1.5.116] Theme shield — carrega depois das bases; a autenticação aplica a sua camada final abaixo
            // para neutralizar regras agressivas do tema com especificidade brutal.
            // Localizado a .onemz-artist-dashboard / .onemz-login-container / .onemz-auth-form.
            wp_enqueue_style(
                'rmbz-account-theme-shield',
                RMBZ_PLUGIN_URL . 'assets/css/account-theme-shield.css',
                ['rmbz-frontend-css', 'rmbz-account-page-css', 'rmbz-fullbleed-css'],
                RMBZ_PLUGIN_VERSION
            );

            // Camada final Material 3 monocromática, exclusiva da autenticação.
            wp_enqueue_style(
                'rmbz-account-auth-m3',
                RMBZ_PLUGIN_URL . 'assets/css/account-auth-m3.css',
                ['rmbz-account-theme-shield'],
                file_exists( RMBZ_PLUGIN_PATH . 'assets/css/account-auth-m3.css' ) ? (string) filemtime( RMBZ_PLUGIN_PATH . 'assets/css/account-auth-m3.css' ) : RMBZ_PLUGIN_VERSION
            );

            wp_enqueue_script( 'rmbz-account-page-js', RMBZ_PLUGIN_URL . 'assets/js/account-page.js', ['jquery'], RMBZ_PLUGIN_VERSION, true );
            wp_enqueue_script(
                'rmbz-account-auth-m3-js',
                RMBZ_PLUGIN_URL . 'assets/js/account-auth-m3.js',
                ['rmbz-account-page-js'],
                file_exists( RMBZ_PLUGIN_PATH . 'assets/js/account-auth-m3.js' ) ? (string) filemtime( RMBZ_PLUGIN_PATH . 'assets/js/account-auth-m3.js' ) : RMBZ_PLUGIN_VERSION,
                true
            );

            wp_localize_script( 'rmbz-account-page-js', 'onemz_ajax_data', [
                'ajax_url'           => admin_url('admin-ajax.php'),
                'check_status_nonce' => wp_create_nonce('onemz_check_status_nonce'),
                'upload_nonce'       => wp_create_nonce('onemz_music_upload_nonce'),
                // [SEC-MA*] nonce partilhado pelos handlers AJAX de notificações:
                // mark_notif_read, clear_notifs, dismiss_admin_popup, heartbeat.
                'notif_nonce'        => wp_create_nonce('rmbz_notif_nonce'),
                'is_logged_in'       => rmbz_is_user_logged_in()
            ]);

            // [1.5.424] O wizard NATIVO de criar lançamento usa o date-picker
            // inteligente do módulo — carrega os seus assets sempre que o
            // layout VIP está ligado (a secção Distribuição tem o wizard).
            if ( function_exists('rmbz_vip_layout_on') && function_exists('rmbz_get_current_user_telemovel')
                 && rmbz_vip_layout_on( rmbz_get_current_user_telemovel() ) ) {
                wp_enqueue_style( 'rmbz-date-picker-css', RMBZ_PLUGIN_URL . 'assets/css/rmbz-date-picker.css', [], RMBZ_PLUGIN_VERSION );
                wp_enqueue_script( 'rmbz-date-picker-js', RMBZ_PLUGIN_URL . 'assets/js/rmbz-date-picker.js', [], RMBZ_PLUGIN_VERSION, true );

            }

            // [1.5.419] ESTÚDIO DE DISTRIBUIÇÃO em ecrã inteiro DENTRO da
            // minha-conta: quando há ?distro_action= (o painel VIP faz o
            // takeover do módulo de distribuição), enfileira os assets dele
            // (é um render de página real, por isso o JS corre normalmente).
            if ( isset( $_GET['distro_action'] )
                 && function_exists('rmbz_vip_layout_on') && function_exists('rmbz_get_current_user_telemovel')
                 && rmbz_vip_layout_on( rmbz_get_current_user_telemovel() ) ) {
                wp_enqueue_style( 'rmbz-distro-css', RMBZ_PLUGIN_URL . 'assets/css/distribution.css', [], RMBZ_PLUGIN_VERSION );
                wp_enqueue_style( 'rmbz-distribution-theme-shield', RMBZ_PLUGIN_URL . 'assets/css/distribution-theme-shield.css', ['rmbz-distro-css'], RMBZ_PLUGIN_VERSION );
                wp_enqueue_style( 'rmbz-distro-fullbleed', RMBZ_PLUGIN_URL . 'assets/css/distribution-fullbleed.css', ['rmbz-distro-css'], RMBZ_PLUGIN_VERSION );
                wp_enqueue_script( 'rmbz-distro-js', RMBZ_PLUGIN_URL . 'assets/js/distribution.js', ['jquery'], RMBZ_PLUGIN_VERSION, true );
                wp_localize_script( 'rmbz-distro-js', 'rmbz_distro_vars', [
                    'ajax_url' => admin_url('admin-ajax.php'),
                    'nonce'    => wp_create_nonce('rmbz_distro_nonce'),
                ]);
                wp_enqueue_style( 'rmbz-date-picker-css', RMBZ_PLUGIN_URL . 'assets/css/rmbz-date-picker.css', [], RMBZ_PLUGIN_VERSION );
                wp_enqueue_script( 'rmbz-date-picker-js', RMBZ_PLUGIN_URL . 'assets/js/rmbz-date-picker.js', [], RMBZ_PLUGIN_VERSION, true );
            }
        }

        // 2. CORREÇÃO: CARREGAMENTO DO DASHBOARD DE DISTRIBUIÇÃO (Movido dos shortcodes.php)
        if ( has_shortcode( $post->post_content, '1mz_distribution_dashboard' ) ) {

            // [DS 1.5.31] Design System também na distribuição
            if ( function_exists( 'rmbz_enqueue_design_system' ) ) {
                rmbz_enqueue_design_system();
            }

            wp_enqueue_style( 'rmbz-distro-css', RMBZ_PLUGIN_URL . 'assets/css/distribution.css', [], RMBZ_PLUGIN_VERSION );

            // [1.5.117] Theme shield para distribuição — carrega POR ÚLTIMO para
            // neutralizar regras agressivas do tema dentro de .rmbz-fullbleed.
            // Não toca no paywall (que tem o seu próprio escudo).
            wp_enqueue_style(
                'rmbz-distribution-theme-shield',
                RMBZ_PLUGIN_URL . 'assets/css/distribution-theme-shield.css',
                ['rmbz-distro-css'],
                RMBZ_PLUGIN_VERSION
            );

            wp_enqueue_script( 'rmbz-distro-js', RMBZ_PLUGIN_URL . 'assets/js/distribution.js', ['jquery'], RMBZ_PLUGIN_VERSION, true );

            wp_localize_script( 'rmbz-distro-js', 'rmbz_distro_vars', [
                'ajax_url' => admin_url('admin-ajax.php'),
                'nonce'    => wp_create_nonce('rmbz_distro_nonce')
            ]);

            // [1.5.147] Date picker isolado — CSS + JS independentes.
            // Usado no wizard (passo 1) e potencialmente noutros sítios.
            wp_enqueue_style(
                'rmbz-date-picker-css',
                RMBZ_PLUGIN_URL . 'assets/css/rmbz-date-picker.css',
                [],
                RMBZ_PLUGIN_VERSION
            );
            wp_enqueue_script(
                'rmbz-date-picker-js',
                RMBZ_PLUGIN_URL . 'assets/js/rmbz-date-picker.js',
                [],   // sem dependências — vanilla JS
                RMBZ_PLUGIN_VERSION,
                true  // no footer
            );
        }
    }
}
add_action( 'wp_enqueue_scripts', 'rmbz_enqueue_scripts' );


/**
 * ==========================================================================
 * CARREGAR SCRIPTS E ESTILOS DO BACK-END (PAINEL DE ADMINISTRAÇÃO)
 * ==========================================================================
 */
function rmbz_admin_enqueue_scripts( $hook ) {

    $screen = get_current_screen();

    if ( ! $screen || ! isset( $screen->id ) || empty( $screen->id ) ) {
        return;
    }

    $screen_id = (string) $screen->id;

    if ( strpos((string) ($screen_id ?? ''), 'rmbz') !== false || strpos((string) ($screen_id ?? ''), '1mz') !== false ) {

        // [DS 1.5.31] Design System também no admin do plugin
        if ( function_exists( 'rmbz_enqueue_design_system' ) ) {
            rmbz_enqueue_design_system();
        }

        wp_enqueue_style( 'rmbz-admin-css', RMBZ_PLUGIN_URL . 'assets/css/admin/pending-orders.css', [], RMBZ_PLUGIN_VERSION );
        wp_enqueue_script( 'rmbz-admin-js', RMBZ_PLUGIN_URL . 'assets/js/admin/pending-orders.js', [], RMBZ_PLUGIN_VERSION, true );
    }
}
add_action( 'admin_enqueue_scripts', 'rmbz_admin_enqueue_scripts' );
