<?php

/**
 * Block Settings
 *
 * @package WPDesk\FS\Compatibility
 */
namespace FSVendor\WPDesk\FS\Compatibility;

use WC_Shipping_Zones;
use FSVendor\WPDesk_Flexible_Shipping;
/**
 * Can prevent Flexible Shipping settings saving.
 */
class BlockSettings
{
    /**
     * @var PluginCompatibilityChecker .
     */
    private $plugin_compatibility_checker;
    /**
     * Notice constructor.
     *
     * @param PluginCompatibilityChecker $plugin_compatibility_checker .
     */
    public function __construct(PluginCompatibilityChecker $plugin_compatibility_checker)
    {
        $this->plugin_compatibility_checker = $plugin_compatibility_checker;
    }
    /**
     * Add hooks.
     */
    public function hooks()
    {
        add_action('admin_init', array($this, 'block_save_settings'));
        add_action('flexible-shipping/method-rules-settings/table/before', array($this, 'add_flexible_shipping_method_message'));
        add_action('flexible_shipping_method_script', array($this, 'add_flexible_shipping_method_message'));
    }
    /**
     * Action when setting are saving.
     */
    public function block_save_settings()
    {
        if (!isset($_POST['save'], $_POST['settings_saving_block'])) {
            return;
        }
        $tab = filter_input(\INPUT_GET, 'tab');
        $page = filter_input(\INPUT_GET, 'page');
        if ('wc-settings' !== $page || 'shipping' !== $tab) {
            return;
        }
        $_wpnonce = filter_input(\INPUT_POST, '_wpnonce');
        if (!wp_verify_nonce(wp_unslash($_wpnonce), 'woocommerce-settings')) {
            return;
        }
        $method_title = filter_input(\INPUT_POST, 'woocommerce_flexible_shipping_method_title');
        $instance_id = absint(wp_unslash(filter_input(\INPUT_GET, 'instance_id')));
        if (!$method_title || !$instance_id) {
            return;
        }
        $shipping_method = WC_Shipping_Zones::get_shipping_method($instance_id);
        if (!$shipping_method) {
            return;
        }
        wp_die($this->get_general_message(), '', array('link_url' => $this->get_plugin_update_url(), 'link_text' => $this->get_plugin_update_label(), 'back_link' => \true));
        // WPCS: XSS OK.
    }
    /**
     * Add scripts for FS method.
     */
    public function add_flexible_shipping_method_message()
    {
        $status = (bool) apply_filters('plugin_compatibility_checker/js_added', \false);
        if ($status) {
            return;
        }
        $action = filter_input(\INPUT_GET, 'action');
        if (!$action) {
            return;
        }
        add_filter('plugin_compatibility_checker/js_added', '__return_true');
        $message = $this->get_message_for_settings();
        include wp_normalize_path(__DIR__ . '/views/html-update-settings-alert.php');
    }
    /**
     * Message for incompatible plugins.
     *
     * @return string
     */
    private function get_message_for_settings()
    {
        return sprintf('%s %s', $this->get_general_message(), sprintf('%s%s%s', sprintf('<a target="_blank" href="%s">', $this->get_plugin_update_url()), $this->get_plugin_update_label(), '</a>'));
    }
    /**
     * @return string
     */
    private function get_general_message()
    {
        $plugins = implode(', ', $this->plugin_compatibility_checker->get_list_of_incompatible_plugins());
        return sprintf(__('In order to prevent any further issues with the plugin configuration or its proper functioning, before saving the changes please update the following: %s.', 'flexible-shipping'), sprintf('<strong>%s</strong>', $plugins));
    }
    /**
     * @return string
     */
    private function get_plugin_update_label()
    {
        return __('Go to the plugins list &rarr;', 'flexible-shipping');
    }
    /**
     * @return string
     */
    private function get_plugin_update_url()
    {
        return add_query_arg('s', 'Flexible Shipping', admin_url('plugins.php'));
    }
}
