<?php

declare( strict_types=1 );

/**
 * Get the Plugin URL.
 *
 * @param string $path The relative path.
 *
 * @return string
 */
function hub_asset_url( string $path ): string {
	$base_url = plugin_dir_url( dirname( __FILE__ ) );

	return untrailingslashit( $base_url ) . $path;
}

/**
 * Get the Plugin path.
 *
 * @param string $path The relative path.
 *
 * @return string
 */
function hub_path( string $path ): string {
	$base_path = plugin_dir_path( dirname( __FILE__ ) );

	return $base_path . $path;
}

/**
 * Check if the LearnDash version is compatible with the plugin requirements.
 *
 * @param array $plugin_data The plugin data containing requirements.
 * @param string $learndash_version The current version of LearnDash.
 *
 * @return bool|\WP_Error True if compatible, WP_Error if not compatible.
 */
function is_learndash_version_compatible( array $plugin_data, $learndash_version = '' ) {
	$require_ld = $plugin_data['requires_ld'] ?? '';

	if ( empty( $require_ld ) || empty( $learndash_version ) ) {
		// if the requires ld is empty, or the user install this plugin without learndash, we just process as now.
		return true;
	}

	$parts = explode( '.', $require_ld );
	if ( count( $parts ) === 2 ) {
		// this means the plugins not PHP standard.
		$parts[]    = '0';
		$require_ld = implode( '.', $parts );
	}

	if ( version_compare( $learndash_version, $require_ld, '<' ) ) {
		$error = sprintf(
		/* translators: 1: Current WordPress version, 2: Version required by the uploaded plugin. */
			__( 'Your LearnDash version is %1$s, however the uploaded plugin requires %2$s.' ),
			$learndash_version,
			$require_ld
		);

		return new \WP_Error( 'incompatible_learndash_required_version', $error );
	}

	// otherwise, just process as usual
	return true;
}