<?php
/**
 * Hafenstudios Core - eingebetteter Bootstrap.
 *
 * Jedes Plugin der Flotte buendelt eine Kopie dieser Bibliothek und laedt diese
 * Datei bei jedem Request. Alle Kopien registrieren ihre Version in einer globalen
 * Liste. Auf `plugins_loaded` (frueh) waehlt der Loader die hoechste registrierte
 * Version und laedt ausschliesslich diese. So gewinnt die neueste geladene
 * Core-Version, unabhaengig davon, welches Plugin sie mitbringt (Muster: Action
 * Scheduler).
 *
 * WICHTIG: Diese Datei darf keinen versionsspezifischen Zustand global halten.
 * Die Version wird beim Buendeln je Kopie in VERSION hinterlegt und hier gelesen.
 *
 * @package Hafenstudios\Core
 */

// Ausserhalb von WordPress (Composer-CLI, PHPUnit, wp-cli ohne Bootstrap) nichts
// tun, aber den Prozess NICHT beenden: Diese Datei wird ueber den files-Autoload
// von Composer bei jedem Prozessstart geladen; ein exit wuerde jedes CLI-Tooling
// still abwuergen.
if ( ! defined( 'ABSPATH' ) ) {
	return;
}

// Version dieser konkreten Kopie (aus der gebuendelten VERSION-Datei).
$hafenstudios_core_this_version = '1.0.0';
$hafenstudios_core_version_file = __DIR__ . '/VERSION';
if ( is_readable( $hafenstudios_core_version_file ) ) {
	$hafenstudios_core_this_version = trim( (string) file_get_contents( $hafenstudios_core_version_file ) );
}

if ( ! function_exists( 'hafenstudios_core_register_version' ) ) {

	/**
	 * Registriert eine geladene Core-Kopie.
	 *
	 * @param string $version Semantische Version.
	 * @param string $dir     Absolutes Verzeichnis dieser Kopie.
	 * @return void
	 */
	function hafenstudios_core_register_version( $version, $dir ) {
		global $hafenstudios_core_versions;
		if ( ! isset( $hafenstudios_core_versions ) || ! is_array( $hafenstudios_core_versions ) ) {
			$hafenstudios_core_versions = array();
		}
		$hafenstudios_core_versions[ (string) $version ] = (string) $dir;
	}

	/**
	 * Waehlt die hoechste registrierte Version und bootet sie genau einmal.
	 *
	 * @return void
	 */
	function hafenstudios_core_load_latest() {
		global $hafenstudios_core_versions;

		if ( empty( $hafenstudios_core_versions ) || defined( 'HAFENSTUDIOS_CORE_LOADED' ) ) {
			return;
		}

		uksort( $hafenstudios_core_versions, 'version_compare' );
		$version = array_key_last( $hafenstudios_core_versions );
		$dir     = $hafenstudios_core_versions[ $version ];

		define( 'HAFENSTUDIOS_CORE_LOADED', true );
		define( 'HAFENSTUDIOS_CORE_VERSION', $version );
		define( 'HAFENSTUDIOS_CORE_DIR', $dir );

		require_once $dir . '/src/autoload.php';

		\Hafenstudios\Core\Core::instance()->boot();
	}

	// Frueh laden, damit Plugins den Core in ihrem eigenen `plugins_loaded`
	// (Standardprioritaet) bereits nutzen koennen.
	add_action( 'plugins_loaded', 'hafenstudios_core_load_latest', -50 );
}

hafenstudios_core_register_version( $hafenstudios_core_this_version, __DIR__ );

unset( $hafenstudios_core_this_version, $hafenstudios_core_version_file );
