<?php
/**
 * Australcode Admin Kit — page header canónico (L-003 + L-029).
 *
 * Template parcial copiable: el plugin lo incluye con sus variables o lo
 * adapta a su view layer. Estructura: app-icon del producto (icon-256, 8.121) +
 * título + versión + acciones + <hr class="wp-header-end"> (L-029: sin él, WP
 * inyecta los admin notices DENTRO del header flex y rompe el layout).
 *
 * Espera (con defaults seguros):
 *   $acds_title    string  — nombre display del plugin (ej. 'Australcode Uniform Images')
 *   $acds_version  string  — versión (ej. '1.2.0')
 *   $acds_lede     string  — opcional: descripción 1 frase (§7.quinquies: lede SIEMPRE presente, ≤2 líneas, ≤720px)
 *   $acds_mark_url string  — URL al app-icon del producto (assets/acds/icons/icon-256-<slug>.svg, decisión 8.121); NO el mark de familia `>_`. La familia la carga la firma verde dentro del icono.
 *   $acds_actions  string  — HTML opcional de acciones (botones), ya escapado
 *   $acds_tabs     array   — opcional: [ ['label'=>..., 'url'=>..., 'active'=>bool], ... ]
 *
 * El wrapper de la página debe ser: <div class="acds-root"><div class="acds-wrap"> …
 *
 * Cuerpo en function-scope (IIFE + get_defined_vars): los locales del parcial
 * viven en el closure, NO en el scope global del include → elimina
 * WordPress.NamingConventions.PrefixAllGlobals (~25 warnings) en TODO plugin
 * consumidor, sin depender de su prefix-allowlist (B-117). El contrato NO
 * cambia: el host sigue seteando $acds_* y haciendo require; get_defined_vars()
 * se los pasa al closure como $acds_ctx.
 *
 * @package Australcode\AdminKit
 */

defined( 'ABSPATH' ) || exit;

( static function ( array $acds_ctx ): void {
	$acds_title    = isset( $acds_ctx['acds_title'] ) ? $acds_ctx['acds_title'] : '';
	$acds_version  = isset( $acds_ctx['acds_version'] ) ? $acds_ctx['acds_version'] : '';
	$acds_lede     = isset( $acds_ctx['acds_lede'] ) ? $acds_ctx['acds_lede'] : '';
	$acds_mark_url = isset( $acds_ctx['acds_mark_url'] ) ? $acds_ctx['acds_mark_url'] : '';
	$acds_actions  = isset( $acds_ctx['acds_actions'] ) ? $acds_ctx['acds_actions'] : '';
	$acds_tabs     = isset( $acds_ctx['acds_tabs'] ) && is_array( $acds_ctx['acds_tabs'] ) ? $acds_ctx['acds_tabs'] : array();
	?>
	<header class="acds-page-header">
		<?php if ( $acds_mark_url ) : ?>
			<img class="acds-page-header__mark" src="<?php echo esc_url( $acds_mark_url ); ?>" alt="" width="26" height="26" />
		<?php endif; ?>
		<h1 class="acds-page-header__title"><?php echo esc_html( $acds_title ); ?></h1>
		<?php if ( $acds_version ) : ?>
			<span class="acds-page-header__version acds-mono">v<?php echo esc_html( $acds_version ); ?></span>
		<?php endif; ?>
		<?php if ( $acds_actions ) : ?>
			<div class="acds-page-header__actions"><?php echo $acds_actions; // phpcs:ignore WordPress.Security.EscapeOutput -- pre-escaped by caller. ?></div>
		<?php endif; ?>
		<?php if ( $acds_lede ) : ?>
			<p class="acds-page-header__lede"><?php echo esc_html( $acds_lede ); ?></p>
		<?php endif; ?>
	</header>
	<?php if ( $acds_tabs ) : ?>
		<nav class="acds-tabs">
			<?php foreach ( $acds_tabs as $acds_tab ) : ?>
				<a class="acds-tabs__tab"
					aria-selected="<?php echo ! empty( $acds_tab['active'] ) ? 'true' : 'false'; ?>"
					href="<?php echo esc_url( $acds_tab['url'] ); ?>"><?php echo esc_html( $acds_tab['label'] ); ?></a>
			<?php endforeach; ?>
		</nav>
	<?php endif; ?>
	<hr class="wp-header-end" /><?php // L-029: los admin notices de WP se reubican aquí, no dentro del header. ?>
	<?php
} )( get_defined_vars() );
