<?php
/**
 * Point d'entrée unique pour tous les plugins Volade.
 * Garantit un seul menu Volade, même si plusieurs plugins sont actifs.
 *
 * Chaque plugin embarque sa propre copie de ce fichier ; la constante
 * VOLADE_SDK_BOOT_LOADED empêche toute redéclaration entre copies.
 *
 * @package Volade\SDK
 * @license GPL-2.0-or-later
 */

defined( 'ABSPATH' ) || exit;

if ( defined( 'VOLADE_SDK_BOOT_LOADED' ) ) {
	return;
}

define( 'VOLADE_SDK_BOOT_LOADED', true );

if ( ! defined( 'VOLADE_CMS_WP_EXTENSIONS' ) ) {
	define( 'VOLADE_CMS_WP_EXTENSIONS', '/cms/wordpress/extensions' );
}

if ( ! defined( 'VOLADE_CMS' ) ) {
	define( 'VOLADE_CMS', '/cms' );
}

if ( ! defined( 'VOLADE_CMS_WORDPRESS' ) ) {
	define( 'VOLADE_CMS_WORDPRESS', '/cms/wordpress' );
}

if ( ! function_exists( 'volade_extension_catalog_url' ) ) {
	/**
	 * URL publique d'une fiche extension ou du catalogue CMS WordPress.
	 *
	 * @param string $slug Slug extension (vide = page catalogue).
	 * @return string
	 */
	function volade_extension_catalog_url( $slug = '' ) {
		$user_locale = function_exists( 'get_user_locale' ) ? get_user_locale() : get_locale();
		$loc         = ( 0 === strpos( (string) $user_locale, 'fr' ) ) ? 'fr' : 'en';
		$base        = defined( 'VOLADE_CMS_WP_EXTENSIONS' ) ? VOLADE_CMS_WP_EXTENSIONS : '/cms/wordpress/extensions';
		$path        = $slug ? $base . '/' . rawurlencode( (string) $slug ) : $base;

		return 'https://volade.com/' . $loc . $path;
	}
}

if ( ! function_exists( 'volade_extension_doc_url' ) ) {
	/**
	 * URL publique de la documentation d'une extension (locale admin fr|en).
	 *
	 * @param string $slug Slug extension WordPress.
	 * @return string
	 */
	function volade_extension_doc_url( $slug ) {
		return volade_extension_catalog_url( $slug );
	}
}

/**
 * Charge le SDK (une seule fois) et rattache le plugin hôte.
 *
 * @param array{plugin_file:string,plugin_slug:string,plugin_name:string,sdk_path?:string} $args
 * @return Volade_SDK|null
 */
if ( ! function_exists( 'volade_sdk_boot' ) ) {
	function volade_sdk_boot( array $args ) {
		$sdk_path = $args['sdk_path'] ?? '';

		if ( ! class_exists( 'Volade_SDK', false ) ) {
			if ( ! $sdk_path || ! is_readable( $sdk_path ) ) {
				return null;
			}
			require_once $sdk_path;
		}

		unset( $args['sdk_path'] );

		return Volade_SDK::boot( $args );
	}
}
