<?php

/**
 *
 * @link               	 epaka.pl
 * @since             	 1.0.0
 * @package           	 epaka
 *
 * @wordpress-plugin
 * Plugin Name:       	 epaka.pl
 * Plugin URI:        	 https://www.epaka.pl
 * Description:       	 Integracja Woocommerce z epaka.pl. Składanie zamówień, generowanie etykiet, tracking przesyłek, mapa puntów odbioru dla klientów sklepu oraz o wiele więcej przydatnych funkcji dostępnych pod ręką.
 * Version:           	 1.1.7
 * Author:            	 epaka.pl
 * Author URI:        	 https://www.epaka.pl
 * License:           	 GPL-2.0+
 * License URI:       	 http://www.gnu.org/licenses/gpl-2.0.txt
 * Text Domain:       	 epaka
 * Domain Path:       	 /languages
 * Requires at least: 	 6.0
 * Requires PHP:      	 5.6
 * WC requires at least: 6.6.0
 * WC tested up to:      9.0.2
 */

// If this file is called directly, abort.
if ( ! defined( 'WPINC' ) ) {
	die;
}

$epaka_wooActive = false;
foreach(apply_filters( 'active_plugins', get_option( 'active_plugins' )) as $plugin){
	if(preg_match( '/woocommerce.php/',$plugin) == 1){
		$epaka_wooActive = true;
	}
}

add_action( 'before_woocommerce_init', function() {
    if ( class_exists( \Automattic\WooCommerce\Utilities\FeaturesUtil::class ) ) {
        \Automattic\WooCommerce\Utilities\FeaturesUtil::declare_compatibility( 'custom_order_tables', __FILE__, true );
    }
} );


/**
 * Begins execution of the plugin.
 *
 * Since everything within the plugin is registered via hooks,
 * then kicking off the plugin from this point in the file does
 * not affect the page life cycle.
 *
 * @since    1.0.0
 */
function run_epaka() {
	/**
	 * Currently plugin version.
	 * Start at version 1.0.0 and use SemVer - https://semver.org
	 * Rename this for your plugin and update it as you release new versions.
	 */
	define( 'EPAKA_VERSION', '1.1.7' );
	define( 'EPAKA_DOMAIN', 'https://www.epaka.pl/' );
	define( 'EPAKA_PATH', dirname(__FILE__) );
    define( 'EPAKA_ENABLE_SSL_CHECKS', true);


    add_action('epaka_update_order_metadata','updateOrderMetadata',10,0);
    add_action('init', 'epaka_update_runner');
    function epaka_update_runner(){
        $installed_plugin_version = EPAKA_VERSION;
        $db_plugin_version = get_option('epaka_plugin_version');



        if (empty($db_plugin_version) || version_compare($installed_plugin_version, $db_plugin_version, '>')) {
            if(get_option('epaka_updated_metadata') !== "1"){
                if(function_exists('as_has_scheduled_action')) {
                    if (false === as_has_scheduled_action('epaka_update_order_metadata')) {
                        as_schedule_single_action(time() + 60, 'epaka_update_order_metadata');
                    }
                }else{
                    if (false === as_next_scheduled_action('epaka_update_order_metadata')) {
                        as_schedule_single_action(time() + 60, 'epaka_update_order_metadata');
                    }
                }
            }
//            switch ($installed_plugin_version) {
//                case '1.1.0':
////                    if(function_exists('as_has_scheduled_action')) {
////                        if (false === as_has_scheduled_action('epaka_update_order_metadata')) {
////                            as_schedule_single_action(time() + 60, 'epaka_update_order_metadata');
////                        }
////                    }else{
////                        if (false === as_next_scheduled_action('epaka_update_order_metadata')) {
////                            as_schedule_single_action(time() + 60, 'epaka_update_order_metadata');
////                        }
////                    }
//                    break;
//            }
            update_option('epaka_plugin_version',$installed_plugin_version);
        }
    }

    function updateOrderMetadata(){
        add_option('epaka_updated_metadata','1');
        $args = ['date_before' => date('Y-m-d',strtotime(date('Y-m-d').' +1day')), 'limit' => -1];
        $orders = wc_get_orders($args);
        $orderLength = count($orders);
        for($i = 0;$i<$orderLength;$i++){
            $changed = false;
            $oldPointMeta = $orders[$i]->get_meta('_epakaP');
            if(!empty($oldPointMeta)){
                $changed = true;
                $orders[$i]->add_meta_data('epaka_delivery_point',$oldPointMeta);
            }
            $oldPointDescMeta = $orders[$i]->get_meta('_epakaPD');
            if(!empty($oldPointDescMeta)){
                $changed = true;
                $orders[$i]->add_meta_data('epaka_delivery_point_description',$oldPointDescMeta);
            }

            if($changed){
                $orders[$i]->save_meta_data();
            }
        }
    }

	/**
	 * The code that runs during plugin activation.
	 * This action is documented in includes/class-epaka-activator.php
	 */
	function activate_epaka() {
		require_once plugin_dir_path( __FILE__ ) . 'includes/class-epaka-activator.php';
		Epaka_Activator::activate();
	}

	/**
	 * The code that runs during plugin deactivation.
	 * This action is documented in includes/class-epaka-deactivator.php
	 */
	function deactivate_epaka() {
		require_once plugin_dir_path( __FILE__ ) . 'includes/class-epaka-deactivator.php';
		Epaka_Deactivator::deactivate();
	}

	register_activation_hook( __FILE__, 'activate_epaka' );
	register_deactivation_hook( __FILE__, 'deactivate_epaka' );

	/**
	 * The core plugin class that is used to define internationalization,
	 * admin-specific hooks, and public-facing site hooks.
	 */
	require plugin_dir_path( __FILE__ ) . 'includes/class-epaka.php';

	$epaka_plugin = new Epaka();
	$epaka_plugin->run();
    return $epaka_plugin;
}

if(!empty(get_option('permalink_structure'))){
	/**
	 * Check if WooCommerce is active
	 **/
	if ($epaka_wooActive) {
		if(!empty(get_option("epaka_credits_agree"))){
			$epaka_plugin = run_epaka();
            $epaka_plugin->register_blocks();
//            $epaka_plugin->extend_woocommerce_api();
		}else{
			function epaka_woo_error() {
				$class = 'notice notice-error';
				$message = "Do działania pluginu Epaka wymagana jest zgoda na wyświetlenie uznania dla OpenStreetMap oraz Leaflet.";
			 
				printf( '<div class="%1$s"><p>%2$s</p></div>', esc_attr( $class ), esc_html( $message ) );
			}
			add_action( 'admin_notices','epaka_woo_error');

			function epaka_credits(){
				wp_enqueue_style( "epaka", plugin_dir_url( __FILE__ ) . '/admin/css/epaka-admin.min.css', array(), "", 'all' );
				add_menu_page(__('Epaka', 'epaka'),__('Epaka', 'epaka'),'manage_woocommerce','epaka_admin',function(){
					if(!empty($_POST['epaka_credits_agree']) && $_POST['epaka_credits_agree'] == "on"){
						add_option("epaka_credits_agree", 1);
						run_epaka();
						require_once plugin_dir_path( __FILE__ ) . 'includes/class-epaka-activator.php';
						Epaka_Activator::activate();
						wp_redirect("/wp-admin/admin.php?page=epaka_admin_panel_login_page");
					}
					echo "
					<div class='epaka-card'>
						<div class='margin-10px'>
							<span>
								Aby plugin mógł wyświetlić mapę na stronach dla klientów wymagana jest zgoda na wyświetlenie odnośników w mapie do <a href='https://www.openstreetmap.org/'>OpenStreetMap</a>(Map data © <a href='https://www.openstreetmap.org/'>OpenStreetMap</a> contributors, <a href='https://creativecommons.org/licenses/by-sa/2.0/'>CC-BY-SA</a>) oraz <a href='https://leafletjs.com/'>Leaflet</a>. 
							</span>
						</div>
						<form action='/wp-admin/admin.php?page=epaka_admin' method='POST' class='margin-10px'>
							<input id='credits_agree' name='epaka_credits_agree' type='checkbox'/>
							<label for='credits_agree'><b>Zgadzam się</b></label>
							<br/>
							<br/>
							<input value='Zapisz' type='submit'/>
						</form>
					</div>";
				});
			}

			add_action( 'admin_menu', 'epaka_credits' );
		}
	}else{
		// echo "<div>".(new WP_Error( 'woocommerce', "Do działania pluginu Epaka wymagany jest aktywny plugin WooCommerce."))->get_error_messages()."</div>";
		// show_message('Do działania pluginu Epaka wymagany jest aktywny plugin WooCommerce.');
		// apply_filters( 'wp_php_error_message', "Do działania pluginu Epaka wymagany jest aktywny plugin WooCommerce.", "woocommerce" );
		// error_log("Do działania pluginu Epaka wymagany jest aktywny plugin WooCommerce.", 0);
		// br_trigger_error('Do działania pluginu Epaka wymagany jest aktywny plugin WooCommerce.',E_USER_ERROR);
		function epaka_woo_error() {
			$class = 'notice notice-error';
			$message = "Do działania pluginu Epaka wymagany jest aktywny plugin WooCommerce.";
		 
			printf( '<div class="%1$s"><p>%2$s</p></div>', esc_attr( $class ), esc_html( $message ) );
		}
		add_action( 'admin_notices','epaka_woo_error');
	}
}else{
	// show_message('Do poprawnego działania pluginu Epaka wymagane są bezpośrednie odnośniki.');
	// echo "<div>".(new WP_Error( 'permalinks', "Do poprawnego działania pluginu Epaka wymagane są bezpośrednie odnośniki."))->get_error_messages()."</div>";
	// apply_filters( 'wp_php_error_message', "Do poprawnego działania pluginu Epaka wymagane są bezpośrednie odnośniki.", "permalinks" );
	// error_log("Do poprawnego działania pluginu Epaka wymagane są bezpośrednie odnośniki.", 0);
	// br_trigger_error('Do poprawnego działania pluginu Epaka wymagane są bezpośrednie odnośniki. <br/> Ustawienia > Bezpośrednie Odnośniki',E_USER_ERROR);
	function epaka_links_error() {
		$class = 'notice notice-error';
		$message = "Do poprawnego działania pluginu Epaka wymagane są bezpośrednie odnośniki.  (Ustawienia --> Bezpośrednie Odnośniki)";
	 
		printf( '<div class="%1$s"><p>%2$s</p></div>', esc_attr( $class ), esc_html( $message ) );
	}
	add_action( 'admin_notices','epaka_links_error');
}


