<?php
/**
 * Zentrale Asset-Verwaltung für das FSV 63 Child-Theme.
 *
 * Hier werden globale Styles/Skripte sowie template-spezifische Assets
 * an einer Stelle registriert und geladen.
 */

defined( 'ABSPATH' ) || exit;

if ( ! defined( 'FSV63_FONTAWESOME_HANDLE' ) ) {
	define( 'FSV63_FONTAWESOME_HANDLE', 'fsv63-fontawesome' );
}

if ( ! function_exists( 'fsv63_asset_version' ) ) {
	function fsv63_asset_version( $relative_path, $fallback = '1.0.0' ) {
		$file = get_stylesheet_directory() . '/' . ltrim( $relative_path, '/' );

		return file_exists( $file ) ? filemtime( $file ) : $fallback;
	}
}

if ( ! function_exists( 'fsv63_asset_uri' ) ) {
	function fsv63_asset_uri( $relative_path ) {
		return get_stylesheet_directory_uri() . '/' . ltrim( $relative_path, '/' );
	}
}

if ( ! function_exists( 'fsv63_with_fontawesome_dependency' ) ) {
	/**
	 * FontAwesome zentral als Dependency ergänzen.
	 *
	 * So ist die externe Icon-Bibliothek garantiert vor allen Child-Theme Styles
	 * verfügbar – egal ob globale CSS-Datei oder Template-CSS.
	 */
	function fsv63_with_fontawesome_dependency( $deps = array() ) {
		$deps = is_array( $deps ) ? $deps : array();

		if ( ! in_array( FSV63_FONTAWESOME_HANDLE, $deps, true ) ) {
			array_unshift( $deps, FSV63_FONTAWESOME_HANDLE );
		}

		return $deps;
	}
}

if ( ! function_exists( 'fsv63_enqueue_style_asset' ) ) {
	function fsv63_enqueue_style_asset( $handle, $relative_path, $deps = array(), $fallback_version = '1.0.0' ) {
		wp_enqueue_style(
			$handle,
			fsv63_asset_uri( $relative_path ),
			fsv63_with_fontawesome_dependency( $deps ),
			fsv63_asset_version( $relative_path, $fallback_version )
		);
	}
}

if ( ! function_exists( 'fsv63_enqueue_script_asset' ) ) {
	function fsv63_enqueue_script_asset( $handle, $relative_path, $deps = array(), $in_footer = true, $fallback_version = '1.0.0' ) {
		wp_enqueue_script(
			$handle,
			fsv63_asset_uri( $relative_path ),
			$deps,
			fsv63_asset_version( $relative_path, $fallback_version ),
			$in_footer
		);
	}
}

/**
 * Externe Bibliotheken.
 */
function fsv63_enqueue_vendor_assets() {
	if ( is_admin() ) {
		return;
	}

	wp_register_style(
		FSV63_FONTAWESOME_HANDLE,
		'https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.5.2/css/all.min.css',
		array(),
		'6.5.2'
	);

	wp_enqueue_style( FSV63_FONTAWESOME_HANDLE );
}
add_action( 'wp_enqueue_scripts', 'fsv63_enqueue_vendor_assets', 5 );

/**
 * Globale Child-Theme Assets.
 */
function fsv63_enqueue_global_assets() {
	if ( is_admin() ) {
		return;
	}

	$styles = array(
		'fsv-custom-header'      => 'assets/css/base/custom-header.css',
		'fsv-site-background'    => 'assets/css/base/site-background.css',
		'fsv-sponsors-slider'    => 'assets/css/components/sponsors-slider.css',
		'fsv-preloader-custom'   => 'assets/css/components/preloader-custom.css',
		'fsv-hero-slider-custom' => 'assets/css/components/hero-slider-custom.css',
		'fsv-content-card'       => 'assets/css/components/content-card.css',
		'fsv-footer-yellow'      => 'assets/css/components/footer-yellow.css',
		'fsv-history-timeline'   => 'assets/css/pages/history-timeline.css',
		'fsv-history-archive'    => 'assets/css/pages/history-archive.css',
		'fsv63-mobile-nav'       => 'assets/css/fsv63-mobile-nav.css',
	);

	foreach ( $styles as $handle => $path ) {
		fsv63_enqueue_style_asset( $handle, $path );
	}

	$scripts = array(
		'sdk-header-scroll'          => 'assets/js/components/header-scroll.js',
		'fsv-countdown-buttons'      => 'assets/js/components/countdown-buttons.js',
		'fsv-sponsors-slider'        => 'assets/js/components/sponsors-slider.js',
		'fsv-hero-slider-custom'     => 'assets/js/components/hero-slider-custom.js',
		'fsv-history-timeline'       => 'assets/js/pages/history-timeline.js',
		'fsv-history-timeline-anim'  => 'assets/js/pages/history-timeline-anim.js',
		'fsv-history-archive'        => 'assets/js/pages/history-archive.js',
		'fsv63-mobile-nav'           => 'assets/js/fsv63-mobile-nav.js',
	);

	foreach ( $scripts as $handle => $path ) {
		fsv63_enqueue_script_asset( $handle, $path );
	}
}
add_action( 'wp_enqueue_scripts', 'fsv63_enqueue_global_assets', 20 );

/**
 * Template-spezifische Assets.
 */
function fsv63_enqueue_template_assets() {
	if ( is_admin() ) {
		return;
	}

	$template_styles = array(
		'template-feriencamp.php'            => array( 'fsv63-feriencamp', 'assets/css/pages/feriencamp.css' ),
		'template-home.php'                  => array( 'fsv63-home-template', 'assets/css/pages/template-home.css' ),
		'template-im-aufbau.php'             => array( 'fsv63-im-aufbau-template', 'assets/css/pages/im-aufbau.css' ),
		'template-impressum.php'             => array( 'fsv-impressum', 'assets/css/pages/impressum.css' ),
		'template-mediadaten-sponsoring.php' => array( 'fsv63-mediadaten-sponsoring-template', 'assets/css/pages/mediadaten-sponsoring.css' ),
		'template-mitglied-werden.php'       => array( 'fsv-mitglied-werden', 'assets/css/components/mitglied-werden.css' ),
		'template-nachwuchs-team.php'        => array( 'fsv63-nachwuchs-team', 'assets/css/pages/nachwuchs-team.css' ),
		'template-regionalliga.php'          => array( 'fsv-regionalliga-style', 'assets/css/components/regionalliga.css' ),
		'template-schiedsrichter.php'        => array( 'fsv-schiedsrichter', 'assets/css/components/schiedsrichter.css' ),
		'template-sponsoring.php'            => array( 'fsv63-sponsoring-template', 'assets/css/pages/sponsoring.css' ),
		'template-stadion.php'               => array( 'fsv63-stadion-page', 'assets/css/pages/stadion.css' ),
		'template-ticketpreise.php'          => array( 'fsv-ticketpreise', 'assets/css/components/ticketpreise.css' ),
		'template-vereinsheim.php'           => array( 'fsv63-vereinsheim', 'assets/css/pages/vereinsheim.css' ),
	);

	foreach ( $template_styles as $template => $asset ) {
		if ( is_page_template( $template ) ) {
			fsv63_enqueue_style_asset( $asset[0], $asset[1] );
		}
	}

	if ( is_page_template( 'page-datenschutz.php' ) || is_page( 'datenschutz' ) ) {
		fsv63_enqueue_style_asset( 'fsv63-page-datenschutz', 'assets/css/pages/page-datenschutz.css' );
	}

	if ( is_page_template( 'template-impressum.php' ) || is_page( 'impressum' ) ) {
		fsv63_enqueue_style_asset( 'fsv-impressum', 'assets/css/pages/impressum.css' );
	}
}
add_action( 'wp_enqueue_scripts', 'fsv63_enqueue_template_assets', 30 );

/**
 * style.css zuletzt laden, damit Child-Theme Overrides greifen.
 */
function fsv63_enqueue_child_stylesheet() {
	wp_enqueue_style(
		'fsv-child-style',
		get_stylesheet_uri(),
		fsv63_with_fontawesome_dependency(),
		filemtime( get_stylesheet_directory() . '/style.css' )
	);
}
add_action( 'wp_enqueue_scripts', 'fsv63_enqueue_child_stylesheet', 999 );
