<?php

/**
 * Plugin Name: DRBU Discount Rules Box for WooCommerce
 * Plugin URI:  https://discountrulesbox.com
 * Description: Quantity breaks, volume discounts and discount rules for WooCommerce. Buy box with 2 or 3 packs (configurable) with tiered pricing applied automatically in the cart. Shortcode: [drbu_tiered_buy_box]
 * Version: 2.9.48
 * Requires at least: 6.4
 * Requires Plugins: woocommerce
 * Requires PHP: 8.0
 * Author:      Predrag Vujnović
 * Text Domain: drbu-discount-rules-box-for-woocommerce
 * Domain Path: /languages
 * License:     GPL v2 or later
 *
 * WC requires at least: 7.0
 * WC tested up to: 9.5
 */
if ( !defined( 'ABSPATH' ) ) {
    exit;
}
// Freemius auto-deactivation: kada su obe verzije (Free i Pro) instalirane,
// druga koja se učita samo registruje basename i zaustavlja se.
if ( function_exists( 'drbu_fs' ) ) {
    drbu_fs()->set_basename( false, __FILE__ );
    return;
}
define( 'DRBU_PLUGIN_DIR', plugin_dir_path( __FILE__ ) );
define( 'DRBU_PLUGIN_URL', plugin_dir_url( __FILE__ ) );
define( 'DRBU_VERSION', '2.9.48' );
/**
 * Proverava da li je WooCommerce aktivan (uključujući network-activate na multisite-u).
 */
function drbu_check_woocommerce() {
    $active_plugins = (array) get_option( 'active_plugins', array() );
    if ( is_multisite() ) {
        $active_plugins = array_merge( $active_plugins, array_keys( (array) get_site_option( 'active_sitewide_plugins', array() ) ) );
    }
    return in_array( 'woocommerce/woocommerce.php', $active_plugins, true );
}

/**
 * Aktivacija: zahtevamo WooCommerce pre nego što dozvolimo aktivaciju.
 */
register_activation_hook( __FILE__, 'drbu_activate' );
function drbu_activate() {
    if ( !drbu_check_woocommerce() ) {
        deactivate_plugins( plugin_basename( __FILE__ ) );
        wp_die( esc_html__( 'Discount Rules Box requires an active WooCommerce. The plugin has been deactivated.', 'drbu-discount-rules-box-for-woocommerce' ), esc_html__( 'DRBU Discount Rules Box for WooCommerce', 'drbu-discount-rules-box-for-woocommerce' ), array(
            'back_link' => true,
        ) );
    }
}

/**
 * Upozorenje u adminu ako WooCommerce nije aktivan (plugin se ipak učitava
 * dovoljno da prikaže obaveštenje, ali se funkcionalnost ne pokreće).
 */
if ( !drbu_check_woocommerce() ) {
    add_action( 'admin_notices', 'drbu_missing_woocommerce_notice' );
    function drbu_missing_woocommerce_notice() {
        $message = __( 'Discount Rules Box requires WooCommerce. Please install and activate WooCommerce.', 'drbu-discount-rules-box-for-woocommerce' );
        printf( '<div class="notice notice-warning is-dismissible"><p>%s</p></div>', esc_html( $message ) );
    }

    return;
}
/**
 * Deklaracija HPOS (custom order tables) kompatibilnosti.
 */
add_action( 'before_woocommerce_init', 'drbu_declare_hpos_compatibility' );
function drbu_declare_hpos_compatibility() {
    if ( class_exists( \Automattic\WooCommerce\Utilities\FeaturesUtil::class ) ) {
        \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true );
    }
}

require_once DRBU_PLUGIN_DIR . 'includes/class-drbu-core.php';
require_once DRBU_PLUGIN_DIR . 'includes/class-drbu-settings.php';
// Sufiks __premium_only: Freemius Deployment ovaj fajl automatski
// izbacuje iz Free ZIP-a; file_exists() ovde sprečava fatal na Free
// buildu gde fajl fizički ne postoji.
if ( file_exists( DRBU_PLUGIN_DIR . 'includes/class-drbu-analytics__premium_only.php' ) ) {
    require_once DRBU_PLUGIN_DIR . 'includes/class-drbu-analytics__premium_only.php';
}
if ( file_exists( DRBU_PLUGIN_DIR . 'includes/class-drbu-language-presets__premium_only.php' ) ) {
    require_once DRBU_PLUGIN_DIR . 'includes/class-drbu-language-presets__premium_only.php';
}
require_once DRBU_PLUGIN_DIR . 'includes/class-drbu-pricing-engine.php';
require_once DRBU_PLUGIN_DIR . 'includes/class-drbu-cart-handler.php';
require_once DRBU_PLUGIN_DIR . 'includes/class-drbu-shortcode.php';
require_once DRBU_PLUGIN_DIR . 'includes/class-drbu-product-display.php';
require_once DRBU_PLUGIN_DIR . 'includes/class-drbu-license.php';
require_once DRBU_PLUGIN_DIR . 'includes/class-drbu-freemius-hooks.php';
require_once DRBU_PLUGIN_DIR . 'includes/class-drbu-webhook.php';
DRBU_Freemius_Hooks::init();
DRBU_Webhook::init();
/**
 * Freemius SDK inicijalizacija — ažurirano prema Freemius Dashboard konfiguraciji.
 *
 * Product ID: 37209 | Slug: drbu-discount-rules-box | Public Key: pk_1ed69d2634756f08c2a7bf2187d37
 *
 * SDK se nalazi u vendor/freemius/ (Freemius preporuka).
 * Ako SDK nije prisutan (lokalni razvoj), drbu_fs() vraća null
 * i plugin nastavlja da radi u Free modu (graceful fallback).
 *
 * NAPOMENA: Zadržano je ime funkcije drbu_fs() (umesto drb_fs() iz wizarda)
 * jer se koristi u celom kodu (DRBU_License, DRBU_Freemius_Hooks, itd.).
 */
if ( !function_exists( 'drbu_fs' ) ) {
    function drbu_fs() {
        global $drbu_fs;
        if ( !isset( $drbu_fs ) ) {
            $sdk_paths = array(DRBU_PLUGIN_DIR . 'vendor/freemius/wordpress-sdk/start.php', DRBU_PLUGIN_DIR . 'vendor/freemius/start.php', DRBU_PLUGIN_DIR . 'freemius/start.php');
            foreach ( $sdk_paths as $sdk_path ) {
                if ( file_exists( $sdk_path ) ) {
                    require_once $sdk_path;
                    break;
                }
            }
            if ( function_exists( 'fs_dynamic_init' ) ) {
                $drbu_fs = fs_dynamic_init( array(
                    'id'               => '37209',
                    'slug'             => 'drbu-discount-rules-box',
                    'premium_slug'     => 'drbu-discount-rules-box-for-woocommerce-premium',
                    'type'             => 'plugin',
                    'public_key'       => 'pk_1ed69d2634756f08c2a7bf2187d37',
                    'is_premium'       => false,
                    'premium_suffix'   => 'Pro',
                    'has_addons'       => false,
                    'has_paid_plans'   => true,
                    'is_org_compliant' => true,
                    'anonymous_mode'   => true,
                    'trial'            => array(
                        'days'               => 30,
                        'is_require_payment' => false,
                    ),
                    'menu'             => array(
                        'slug'       => 'drbu-tiered-buy-box',
                        'parent'     => array(
                            'slug' => 'drbu-tiered-buy-box',
                        ),
                        'first-path' => 'admin.php?page=drbu-tiered-buy-box',
                        'support'    => false,
                        'contact'    => false,
                    ),
                    'is_live'          => true,
                ) );
            }
        }
        return ( isset( $drbu_fs ) ? $drbu_fs : null );
    }

    // Init Freemius.
    drbu_fs();
    // Pricing widget po defaultu prikazuje godišnju cenu razbijenu na mesečni ekvivalent
    // (npr. "$5.75/mo, billed annually") — pošto plugin nema mesečni plan, prikazuje se
    // puna godišnja cena umesto toga (filter definisan u SDK: templates/pricing.php).
    add_filter( 'fs_pricing/show_annual_in_monthly_' . drbu_fs()->get_unique_affix(), '__return_false' );
    // Isključuje Freemius-ovu sopstvenu "sticky" promo poruku za trial
    // (_add_trial_notice() u SDK-u) — naš admin header već ima sopstveno,
    // stalno vidljivo "Start 30-Day Free Pro Trial" dugme na svakoj DRBU
    // stranici, pa bi ova SDK poruka samo duplirala isti CTA i zauzimala
    // pola ekrana iznad njega.
    add_filter( 'fs_show_trial_' . drbu_fs()->get_unique_affix(), '__return_false' );
    // Sakriva Freemius-ove sopstvene "Account"/"Upgrade" podstavke iz bočne
    // trake (Account i Upgrade sad postoje kao tabovi UNUTAR glavne
    // "Discount Rules Box" stranice — vidi DRBU_Settings render_page()).
    //
    // ISPRAVLJENO (live testiranjem, ne samo čitanjem koda): ranije se ovde
    // koristio remove_submenu_page(), sa komentarom da "zadržava registraciju
    // samih stranica" — ta pretpostavka je bila POGREŠNA. WordPress-ov
    // admin.php dispečer traži stranicu preko istog $submenu niza iz kog je
    // remove_submenu_page() briše, pa direktan posetioc te URL adrese (ili
    // Freemius-ov sopstveni interni redirect posle opt_in()/aktivacije
    // licence, ili naši "Manage Billing"/"Open Customer Portal" linkovi na
    // Account tabu, koji SVI koriste $fs->get_account_url() -> ista URL
    // adresa) dobija "Sorry, you are not allowed to access this page." —
    // potvrđeno direktno, uživo, sa administratorskim nalogom koji ima
    // manage_options. Pošto ta stranica prikazuje pravu Freemius funkciju
    // (upravljanje karticom/računima, uživo sa Freemius API-ja) koju naš
    // sopstveni Account tab NE implementira, ne sme se učiniti potpuno
    // nedostupnom — samo sakrivena iz bočne trake, preko CSS-a, umesto
    // potpunog uklanjanja registracije.
    add_action( 'admin_head', function () {
        ?>
		<style>
			#adminmenu a[href*="page=drbu-tiered-buy-box-account"],
			#adminmenu a[href*="page=drbu-tiered-buy-box-pricing"] {
				display: none !important;
			}
			#adminmenu li:has( > a[href*="page=drbu-tiered-buy-box-account"] ),
			#adminmenu li:has( > a[href*="page=drbu-tiered-buy-box-pricing"] ) {
				display: none !important;
			}
		</style>
		<?php 
    } );
    if ( function_exists( 'do_action' ) ) {
        do_action( 'drbu_fs_loaded' );
    }
}
/**
 * Da li je PRO verzija aktivna ili u 30-dnevnom probnom periodu?
 *
 * Vraća true ako korisnik ima Pro licencu ili je aktivirao 30-day trial preko Freemius-a.
 *
 * @return bool
 */
function drbu_is_pro_active() {
    // JEDINI izvor istine: Freemius SDK. `can_use_premium_code()` interno
    // pokriva plaćenu licencu, aktivni trial i whitelabel/dev instalacije —
    // sve provereno na Freemius serveru, nikad lokalno.
    //
    // NAPOMENA (bezbednost): ovde NIKAD ne dodavati fallback koji "veruje"
    // lokalno sačuvanoj vrednosti (opciji, transientu, GET/POST parametru)
    // bez stvarne validacije preko Freemius API-ja — to je direktan način
    // da se plugin "nulluje" (bilo ko upiše proizvoljan string i otključa Pro).
    // Ručni unos license key-a mora ići isključivo kroz
    // drbu_fs()->activate_license() / Freemius AJAX ('fs_activate_license_*'),
    // nikad kroz strpos()/regex proveru nad opcijom.
    //
    // `drbu_is_pro_active` filter ostaje kao legitiman extensibility hook
    // (npr. za testove ili white-label instalacije) — bezbedan je jer
    // zahteva da neko već ima izvršavanje PHP koda na sajtu (functions.php,
    // mu-plugin), što je potpuno drugi nivo pristupa od pukog unosa teksta
    // u polje na admin ekranu.
    if ( function_exists( 'drbu_fs' ) && drbu_fs() && method_exists( drbu_fs(), 'can_use_premium_code' ) && drbu_fs()->can_use_premium_code() ) {
        return true;
    }
    return (bool) apply_filters( 'drbu_is_pro_active', false );
}

DRBU_Core::instance();