<?php
/**
 * Plugin Name: Invoicing Integration for wFirma and WooCommerce
 * Plugin URI: https://wordpress.org/plugins/invoicing-integration-for-wfirma-and-woocommerce/
 * Description: WooCommerce integration with wFirma accounting system for Polish businesses.
 * Version: 1.0.20
 * Author: Devikit
 * Author URI: https://devikit.pl/
 * Text Domain: invoicing-integration-for-wfirma-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 plugin constants
define( 'DEVIKIT_WFIRMA_VERSION', '1.0.20' );
define( 'DEVIKIT_WFIRMA_FILE', __FILE__ );
define( 'DEVIKIT_WFIRMA_PATH', plugin_dir_path( __FILE__ ) );
define( 'DEVIKIT_WFIRMA_URL', plugin_dir_url( __FILE__ ) );
define( 'DEVIKIT_WFIRMA_BASENAME', plugin_basename( __FILE__ ) );

// Native Autoloader (No Composer needed)
spl_autoload_register( function ( $class ) {
	$prefix = 'Devikit\\Wfirma\\';
	$base_dir = DEVIKIT_WFIRMA_PATH;

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

	$relative_class = substr( $class, $len );
	
	// Map namespaces to directories
	$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 ) {
		// Default to includes
		$file_path = $base_dir . 'includes/' . str_replace( '\\', '/', $relative_class ) . '.php';
	}

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

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

	// Initialize main plugin class
	\Devikit\Wfirma\Plugin::instance();
}
add_action( 'plugins_loaded', 'devikit_wfirma_init' );

// Declare compatibility with HPOS
add_action( 'before_woocommerce_init', function() {
	if ( class_exists( '\Automattic\WooCommerce\Utilities\FeaturesUtil' ) ) {
		\Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', DEVIKIT_WFIRMA_FILE, true );
	}
} );

