<?php

/**
 * Главный класс плагина (core).
 *
 * Бесплатная база. Премиум-логика подключается отдельно через хуки и
 * файлы с суффиксом __premium_only (вырезаются из free-версии Freemius'ом).
 *
 * @package E2W_Price_Change_Alerts
 */
if ( !defined( 'ABSPATH' ) ) {
    exit;
}
/**
 * Class E2W_Price_Change_Alerts_Plugin
 */
class E2W_Price_Change_Alerts_Plugin {
    const OPTION = 'e2w_price_change_alerts_settings';

    /**
     * Текущий режим отслеживания (единственный источник правды для free и premium).
     *
     * @return string 'all' | 'selected'.
     */
    public static function get_mode() {
        $settings = get_option( self::OPTION, array() );
        if ( is_array( $settings ) && isset( $settings['mode'] ) && 'selected' === $settings['mode'] ) {
            return 'selected';
        }
        return 'all';
    }

    /**
     * Регистрация точек входа.
     */
    public function run() {
        add_action( 'init', array($this, 'load_textdomain') );
        add_action( 'plugins_loaded', array($this, 'init'), 20 );
    }

    /**
     * Инициализация после загрузки всех плагинов.
     */
    public function init() {
        if ( !class_exists( 'WooCommerce' ) ) {
            add_action( 'admin_notices', array($this, 'woocommerce_missing_notice') );
            return;
        }
        $this->load_dependencies();
        new E2W_Price_Change_Alerts_Price_Monitor();
        new E2W_Price_Change_Alerts_Change_Collector();
        new E2W_Price_Change_Alerts_Mailer();
        if ( is_admin() ) {
            new E2W_Price_Change_Alerts_Settings();
        }
        // Точка расширения для премиум-кода: премиум вешается сюда внутри
        // __premium_only методов. Так Pro = надстройка, а не форк.
        do_action( 'e2w_price_change_alerts_register_features', $this );
        $this->maybe_load_premium();
    }

    /**
     * Подключение core-файлов (попадают во ВСЕ версии).
     */
    private function load_dependencies() {
        require_once E2W_PRICE_CHANGE_ALERTS_PATH . 'includes/core/class-e2w-price-change-alerts-price-monitor.php';
        require_once E2W_PRICE_CHANGE_ALERTS_PATH . 'includes/core/class-e2w-price-change-alerts-change-collector.php';
        require_once E2W_PRICE_CHANGE_ALERTS_PATH . 'includes/core/class-e2w-price-change-alerts-mailer.php';
        if ( is_admin() ) {
            require_once E2W_PRICE_CHANGE_ALERTS_PATH . 'includes/admin/class-e2w-price-change-alerts-settings.php';
        }
    }

    /**
     * Подключение премиум-файлов.
     *
     * Весь метод вырезается из бесплатной версии Freemius-препроцессором.
     */
    private function maybe_load_premium() {
    }

    /**
     * Notice об отсутствующем WooCommerce.
     */
    public function woocommerce_missing_notice() {
        printf( '<div class="notice notice-error"><p>%s</p></div>', esc_html__( 'Price Change Alerts requires WooCommerce to be installed and active.', 'e2w-price-change-alerts' ) );
    }

    /**
     * Локализация.
     */
    public function load_textdomain() {
        load_plugin_textdomain( 'e2w-price-change-alerts', false, dirname( plugin_basename( E2W_PRICE_CHANGE_ALERTS_FILE ) ) . '/languages/' );
    }

}
