<?php
/**
 * includes/admin/rmbz-global-blocks.php
 *
 * [1.6.47] Bloqueios globais
 * [1.6.47.3] Promoções dividido em 2 flags separados (igual ao painel
 *            por-utilizador): "site" e "social".
 */

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

/**
 * Os tipos de bloqueio global suportados. Mapping para a option key.
 */
function rmbz_global_blocks_keys() {
    return [
        'withdrawals'  => 'rmbz_global_block_withdrawals',
        'deposits'     => 'rmbz_global_block_deposits',
        'distribution' => 'rmbz_global_block_distribution',
        'site'         => 'rmbz_global_block_site',     // [1.6.47.3] Gestão de Músicas (Site)
        'social'       => 'rmbz_global_block_social',   // [1.6.47.3] Promover Vídeos (Redes Sociais)
        'video'        => 'rmbz_global_block_video',
        'logins'       => 'rmbz_global_block_logins',
    ];
}

/**
 * [1.6.47.3] Compat: se ainda existir a antiga `rmbz_global_block_promotions`,
 * tratá-la como ligando `site` E `social`.
 */
function rmbz_global_blocks_legacy_promotions_check() {
    return (int) get_option( 'rmbz_global_block_promotions', 0 ) === 1;
}

/**
 * Verifica se um tipo de acção está bloqueado globalmente.
 */
function rmbz_is_globally_blocked( $type ) {
    $keys = rmbz_global_blocks_keys();
    if ( ! isset( $keys[ $type ] ) ) {
        return false;
    }
    if ( (int) get_option( $keys[ $type ], 0 ) === 1 ) {
        return true;
    }
    // Fallback legacy
    if ( ( $type === 'site' || $type === 'social' ) && rmbz_global_blocks_legacy_promotions_check() ) {
        return true;
    }
    return false;
}

/**
 * Snapshot de todos os flags (para incluir no /profile do API).
 */
function rmbz_global_blocks_snapshot() {
    $out = [];
    foreach ( rmbz_global_blocks_keys() as $type => $option_key ) {
        $out[ 'global_block_' . $type ] = rmbz_is_globally_blocked( $type ) ? 1 : 0;
    }
    // App antigo lê `global_block_promotions` (= site OR social)
    $out['global_block_promotions'] = (
        rmbz_is_globally_blocked('site') || rmbz_is_globally_blocked('social')
    ) ? 1 : 0;
    return $out;
}

/**
 * Lista de tipos actualmente activos (para o banner do admin).
 */
function rmbz_global_blocks_active() {
    $active = [];
    foreach ( array_keys( rmbz_global_blocks_keys() ) as $type ) {
        if ( rmbz_is_globally_blocked( $type ) ) {
            $active[] = $type;
        }
    }
    return $active;
}

/**
 * Label legível para o tipo.
 */
function rmbz_global_block_label( $type ) {
    $labels = [
        'withdrawals'  => 'Levantamentos',
        'deposits'     => 'Depósitos',
        'distribution' => 'Distribuição Digital',
        'site'         => 'Gestão de Músicas (Site)',
        'social'       => 'Promover Vídeos (Redes Sociais)',
        'video'        => 'Candidaturas a Videoclipe',
        'logins'       => 'Logins (Manutenção Total)',
    ];
    return $labels[ $type ] ?? $type;
}

/* =========================================================================
 * BANNER ADMIN
 * =========================================================================
 */
add_action( 'admin_notices', 'rmbz_global_blocks_admin_notice' );

function rmbz_global_blocks_admin_notice() {
    if ( ! current_user_can( 'manage_options' ) ) return;

    $active = rmbz_global_blocks_active();
    if ( empty( $active ) ) return;

    $labels = array_map( 'rmbz_global_block_label', $active );
    $list = implode( ', ', $labels );

    $settings_url = admin_url( 'admin.php?page=rmbz-settings' );
    ?>
    <div class="notice notice-warning" style="border-left-color: #d63638; padding: 12px 14px;">
        <p style="margin: 0 0 6px 0; font-size: 14px;">
            <strong>⚠️ Bloqueios Globais Activos:</strong>
            <?php echo esc_html( $list ); ?>
        </p>
        <p style="margin: 0; color: #555; font-size: 13px;">
            Estes bloqueios afectam <strong>todos os artistas</strong>. Os utilizadores
            estão a ver mensagens de manutenção/indisponibilidade no app e no site.
            <a href="<?php echo esc_url( $settings_url ); ?>">Gerir Bloqueios Globais</a>
        </p>
    </div>
    <?php
}
