<?php

/**
 * Plugin Name: Entrepo — B2B & Wholesale for WooCommerce Pro
 * Plugin URI:           https://honestplugins.github.io/entrepo.html
 * Description:          Wholesale and B2B pricing for WooCommerce, with European VAT (VIES, reverse charge, equivalence surcharge), a clear admin, and a license that keeps working after it lapses.
 * Version:              0.2.1
 * Requires at least:    6.6
 * Requires PHP:         8.0
 * Requires Plugins:     woocommerce
 * Author:               Honest Plugins
 * Author URI:           https://honestplugins.github.io/
 * License:              GPL-2.0-or-later
 * License URI:          https://www.gnu.org/licenses/gpl-2.0.html
 * Text Domain:          entrepo
 * Domain Path:          /languages
 * WC requires at least: 9.0
 * WC tested up to:      10.9
 *
 * @package Entrepo
 */
defined( 'ABSPATH' ) || exit;
/*
 * -----------------------------------------------------------------------------
 * Freemius SDK (F7): licencia, pagos y actualizaciones automáticas de la Pro.
 *
 * Modelo freemium de UN SOLO código: este árbol es el COMPLETO (Pro). Freemius
 * genera desde aquí dos builds — el free (código premium retirado) para
 * WordPress.org, y el Pro para quien compra. `is_org_compliant => true` +
 * `wp_org_gatekeeper` habilitan ese build-free automático de Freemius.
 *
 * El snippet es el que genera el dashboard de Freemius (producto id 35029),
 * pegado casi «AS IS». Única desviación deliberada: el SDK se vendoriza en
 * `freemius/` (raíz del plugin), no en `vendor/freemius/`, porque el
 * empaquetador excluye `vendor/` — de ahí la ruta del require.
 *
 * La costura free/pro ya existía (`Plan::es_pro()` → filtro `entrepo_es_pro`);
 * el gancho de más abajo la ata a la licencia de Freemius sin tocar ninguno de
 * sus consumidores (REST, runtime fiscal, panel), que era el objetivo de F4-2.
 * -----------------------------------------------------------------------------
 */
if ( !function_exists( 'entrepo_fs' ) ) {
    /**
     * Instancia única del SDK de Freemius para este plugin.
     *
     * @return \Freemius
     */
    function entrepo_fs() {
        global $entrepo_fs;
        if ( !isset( $entrepo_fs ) ) {
            require_once dirname( __FILE__ ) . '/freemius/start.php';
            $entrepo_fs = fs_dynamic_init( array(
                'id'               => '35029',
                'slug'             => 'entrepo',
                'type'             => 'plugin',
                'public_key'       => 'pk_e1d88eea2fec2eddf09c9be27627b',
                'is_premium'       => false,
                'premium_suffix'   => 'Pro',
                'has_addons'       => false,
                'has_paid_plans'   => true,
                'is_org_compliant' => true,
                'menu'             => array(
                    'support' => false,
                ),
                'is_live'          => true,
            ) );
        }
        return $entrepo_fs;
    }

    // Arranca Freemius.
    entrepo_fs();
    // Señal de que el SDK ya está listo (por si algo quiere engancharse).
    do_action( 'entrepo_fs_loaded' );
}
/*
 * -----------------------------------------------------------------------------
 * Desinstalación (F7): Freemius NO admite un `uninstall.php` suelto con su SDK.
 * La limpieza de datos va por su hook `after_uninstall`; Freemius carga el
 * plugin (autoloader incluido) al desinstalar, así que `Uninstaller` está
 * disponible cuando dispara. Ver `src/Core/Uninstaller.php`.
 * -----------------------------------------------------------------------------
 */
entrepo_fs()->add_action( 'after_uninstall', array('\\Entrepo\\Core\\Uninstaller', 'run') );
/*
 * -----------------------------------------------------------------------------
 * Constantes
 * -----------------------------------------------------------------------------
 */
define( 'ENTREPO_VERSION', '0.2.0' );
define( 'ENTREPO_FILE', __FILE__ );
define( 'ENTREPO_PATH', plugin_dir_path( __FILE__ ) );
define( 'ENTREPO_URL', plugin_dir_url( __FILE__ ) );
define( 'ENTREPO_BASENAME', plugin_basename( __FILE__ ) );
/*
 * -----------------------------------------------------------------------------
 * Autoloader PSR-4 propio (sin depender de Composer en producción)
 * -----------------------------------------------------------------------------
 */
require_once ENTREPO_PATH . 'src/Core/Autoloader.php';
( new \Entrepo\Core\Autoloader('Entrepo\\', ENTREPO_PATH . 'src') )->register();
/*
 * -----------------------------------------------------------------------------
 * Activación: crea la tabla de precios y los datos por defecto.
 * -----------------------------------------------------------------------------
 */
register_activation_hook( __FILE__, array('\\Entrepo\\Core\\Activator', 'activate') );
/*
 * -----------------------------------------------------------------------------
 * Compatibilidad declarada con las features de WooCommerce.
 *
 * Sin esta declaración, WooCommerce marca el plugin como "incompatible" con
 * HPOS (almacenamiento de pedidos de alto rendimiento) en la lista de plugins,
 * aunque Entrepo NI SIQUIERA toca pedidos (solo precios/roles/metas de
 * producto). Ambas declaraciones son veraces: no accedemos a las tablas
 * legacy de pedidos y los filtros de precio son server-side (funcionan igual
 * con el checkout clásico y con el de bloques).
 * -----------------------------------------------------------------------------
 */
add_action( 'before_woocommerce_init', static function () {
    if ( class_exists( \Automattic\WooCommerce\Utilities\FeaturesUtil::class ) ) {
        \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true );
        \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'cart_checkout_blocks', __FILE__, true );
    }
} );
/*
 * -----------------------------------------------------------------------------
 * Arranque: solo con WooCommerce presente.
 * -----------------------------------------------------------------------------
 */
add_action( 'plugins_loaded', static function () {
    if ( !class_exists( 'WooCommerce' ) ) {
        return;
    }
    \Entrepo\Core\Plugin::instance()->boot();
} );