<?php
/**
 * Australcode Admin Kit — icono del menú admin canónico (decisión 8.121).
 *
 * Pinta el glyph del producto (`assets/img/glyph-menu.svg`) en el item top-level
 * del menú admin vía CSS `mask` + `background-color:currentColor` → el icono
 * RECOLOREA como los dashicons nativos (gris inactivo → blanco en hover/activo,
 * adapta a esquemas como *midnight*), a diferencia de un `data:`-URI como
 * `background-image`, que WP NO recolorea (era el drift de la era 8.116). Patrón:
 * el plugin registra `add_menu_page( …, 'none' )` (slot vacío) y engancha este
 * parcial a `admin_enqueue_scripts` para encolarlo (vía wp_add_inline_style — NO
 * un `<style>` crudo; WP.org guideline). Centraliza el `printMenuIconStyle()` que
 * cada plugin reinventaba a mano (B-136).
 *
 * Espera (con defaults seguros):
 *   $acds_menu_slug  string  — slug del menú top-level (self::SLUG del plugin)
 *   $acds_glyph_url  string  — URL pública al glyph (…/assets/img/glyph-menu.svg)
 *   $acds_glyph_path string  — opcional: path en disco del glyph; si se pasa y NO
 *                              es legible, no emite nada (el plugin ya cayó al
 *                              dashicon nativo en `add_menu_page()`).
 *
 * Uso (en un método enganchado a `admin_enqueue_scripts`):
 *   $acds_menu_slug  = self::SLUG;
 *   $acds_glyph_url  = MI_PLUGIN_URL . 'assets/img/glyph-menu.svg';
 *   $acds_glyph_path = MI_PLUGIN_PATH . 'assets/img/glyph-menu.svg';
 *   require MI_PLUGIN_PATH . 'assets/acds/menu-icon.php';
 *
 * Cuerpo en function-scope (IIFE + get_defined_vars(), B-117): los locales del
 * parcial viven en el closure, NO en el scope global del include → cero
 * WordPress.NamingConventions.PrefixAllGlobals. Sin strings traducibles → este
 * parcial se copia VERBATIM (no lleva el sentinel de text-domain que acds-sync.sh
 * reemplaza; mencionar el literal acá lo mutaría el sed → falso drift en check 20).
 *
 * @package Australcode\AdminKit
 */

defined( 'ABSPATH' ) || exit;

( static function ( array $acds_ctx ): void {
	$acds_menu_slug  = isset( $acds_ctx['acds_menu_slug'] ) ? (string) $acds_ctx['acds_menu_slug'] : '';
	$acds_glyph_url  = isset( $acds_ctx['acds_glyph_url'] ) ? (string) $acds_ctx['acds_glyph_url'] : '';
	$acds_glyph_path = isset( $acds_ctx['acds_glyph_path'] ) ? (string) $acds_ctx['acds_glyph_path'] : '';

	if ( '' === $acds_menu_slug || '' === $acds_glyph_url ) {
		return;
	}
	if ( '' !== $acds_glyph_path && ! is_readable( $acds_glyph_path ) ) {
		return; // El plugin ya cayó al dashicon nativo en add_menu_page().
	}

	$acds_slug = esc_attr( $acds_menu_slug );
	$acds_url  = esc_url( $acds_glyph_url );
	$acds_css  = "#adminmenu li.toplevel_page_{$acds_slug} .wp-menu-image::before{content:'';display:block;width:20px;height:20px;margin:7px auto 0;background-color:currentColor;-webkit-mask:url('{$acds_url}') center/20px no-repeat;mask:url('{$acds_url}') center/20px no-repeat;}";

	// Deliver the icon CSS through the WordPress stylesheet pipeline — WP.org
	// requires wp_enqueue / wp_add_inline_style, not a hand-printed <style> tag. A
	// registered handle with no file (src = false) is the canonical carrier for
	// inline CSS; the consuming plugin hooks this partial on admin_enqueue_scripts
	// so the style is queued before the styles phase prints (on admin_head it would
	// be too late). The icon and its currentColor recoloring are unchanged.
	$acds_handle = 'acds-menu-icon-' . $acds_slug;
	if ( ! wp_style_is( $acds_handle, 'registered' ) ) {
		wp_register_style( $acds_handle, false, array(), '1.0.0' );
	}
	wp_enqueue_style( $acds_handle );
	wp_add_inline_style( $acds_handle, $acds_css );
} )( get_defined_vars() );
