<?php
/**
 * Plugin Name: Invoicing Integration for Fakturowo and WooCommerce
 * Plugin URI: https://pl.wordpress.org/plugins/invoicing-integration-for-fakturowo-and-woocommerce/
 * Description: WooCommerce integration with Fakturowo accounting system.
 * Version: 1.0.15
 * Author: Devikit
 * Author URI: https://devikit.pl/
 * Text Domain: invoicing-integration-for-fakturowo-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
 */

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

// Define plugin constants.
define( 'DEVIKIT_FAKTUROWO_VERSION', '1.0.15' );
define( 'DEVIKIT_FAKTUROWO_FILE', __FILE__ );
define( 'DEVIKIT_FAKTUROWO_PATH', plugin_dir_path( __FILE__ ) );
define( 'DEVIKIT_FAKTUROWO_URL', plugin_dir_url( __FILE__ ) );
define( 'DEVIKIT_FAKTUROWO_BASENAME', plugin_basename( __FILE__ ) );

// Native Autoloader (No Composer needed).
spl_autoload_register( function ( $class ) {
    $prefix   = 'Devikit\\Fakturowo\\';
    $base_dir = DEVIKIT_FAKTUROWO_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_fakturowo_init() {
    if ( ! function_exists( 'WC' ) ) {
        add_action( 'admin_notices', function () {
            echo '<div class="error"><p>' . esc_html__( 'Fakturowo WooCommerce requires WooCommerce to be installed and active.', 'invoicing-integration-for-fakturowo-and-woocommerce' ) . '</p></div>';
        } );
        return;
    }

    \Devikit\Fakturowo\Plugin::instance();
}
add_action( 'plugins_loaded', 'devikit_fakturowo_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_FAKTUROWO_FILE, true );
    }
} );

