<?php
/**
 * Plugin Name: Invoicing Integration for Sellsy and WooCommerce
 * Plugin URI: https://wordpress.org/plugins/invoicing-integration-for-sellsy-and-woocommerce/
 * Description: WooCommerce integration with Sellsy for French businesses — create invoices and sync contacts.
 * Version: 1.0.0
 * Author: Devikit
 * Author URI: https://devikit.fr/
 * Text Domain: invoicing-integration-for-sellsy-and-woocommerce
 * Domain Path: /languages
 * Requires at least: 5.8
 * Requires PHP: 7.4
 * Requires Plugins: woocommerce
 * WC requires at least: 5.0
 * License: GPLv3
 * License URI: https://www.gnu.org/licenses/gpl-3.0.html
 */

if ( ! defined( 'ABSPATH' ) ) {
	exit;
}

define( 'DEVIKIT_SELLSY_VERSION', '1.0.0' );
define( 'DEVIKIT_SELLSY_FILE', __FILE__ );
define( 'DEVIKIT_SELLSY_PATH', plugin_dir_path( __FILE__ ) );
define( 'DEVIKIT_SELLSY_URL', plugin_dir_url( __FILE__ ) );
define( 'DEVIKIT_SELLSY_BASENAME', plugin_basename( __FILE__ ) );

spl_autoload_register( function ( $class ) {
	$prefix   = 'Devikit\\Sellsy\\';
	$base_dir = DEVIKIT_SELLSY_PATH;

	$len = strlen( $prefix );
	if ( strncmp( $prefix, $class, $len ) !== 0 ) {
		return;
	}

	$relative_class = substr( $class, $len );

	$map = [
		'Admin\\' => 'admin/',
		'Api\\'   => 'api/',
	];

	$file_path = '';
	$found     = false;

	foreach ( $map as $ns_prefix => $dir ) {
		if ( strncmp( $ns_prefix, $relative_class, strlen( $ns_prefix ) ) === 0 ) {
			$class_file = str_replace( $ns_prefix, '', $relative_class );
			$file_path  = $base_dir . $dir . str_replace( '\\', '/', $class_file ) . '.php';
			$found      = true;
			break;
		}
	}

	if ( ! $found ) {
		$file_path = $base_dir . 'includes/' . str_replace( '\\', '/', $relative_class ) . '.php';
	}

	if ( file_exists( $file_path ) ) {
		require $file_path;
	}
} );

/**
 * Initialize the plugin.
 */
function devikit_sellsy_init() {
	// Bundled fr_FR until WordPress.org language packs are available.
	// phpcs:ignore PluginCheck.CodeAnalysis.DiscouragedFunctions.load_plugin_textdomainFound
	load_plugin_textdomain(
		'invoicing-integration-for-sellsy-and-woocommerce',
		false,
		dirname( DEVIKIT_SELLSY_BASENAME ) . '/languages'
	);

	if ( ! function_exists( 'WC' ) ) {
		add_action(
			'admin_notices',
			function () {
				echo '<div class="error"><p>' . esc_html__( 'Sellsy WooCommerce requires WooCommerce to be installed and active.', 'invoicing-integration-for-sellsy-and-woocommerce' ) . '</p></div>';
			}
		);
		return;
	}

	\Devikit\Sellsy\Plugin::instance();
}
add_action( 'plugins_loaded', 'devikit_sellsy_init' );

add_action(
	'before_woocommerce_init',
	function () {
		if ( class_exists( '\Automattic\WooCommerce\Utilities\FeaturesUtil' ) ) {
			\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', DEVIKIT_SELLSY_FILE, true );
		}
	}
);
