<?php
/*
 * Copyright (c) 2018, Ryo Currency Project
 * Admin interface for Monero gateway
 * Authors: mosu-forge
 */

defined( 'ABSPATH' ) || exit;

require_once('class-monero-admin-payments-list.php');

if (class_exists('Monero_Admin_Interface', false)) {
    return new Monero_Admin_Interface();
}

class Monero_Admin_Interface {

    public function __construct() {
        add_action('add_meta_boxes', array($this, 'meta_boxes'));
        add_action('admin_menu', array($this, 'admin_menu'));
        add_action('admin_head', array( $this, 'admin_menu_update'));
    }

    /**
     * Add meta boxes.
     */
    public function meta_boxes() {
        add_meta_box(
            'monero_admin_order_details',
            __('Monero Gateway','monero_gateway'),
            array($this, 'meta_box_order_details'),
            'shop_order',
            'normal',
            'high'
        );
    }

    /**
     * Meta box for order page
     */
    public function meta_box_order_details($order) {
        Monero_Gateway::admin_order_page($order);
    }

    /**
     * Add menu items.
     */
    public function admin_menu() {
        add_menu_page(
            __('Monero', 'monero_gateway'),
            __('Monero', 'monero_gateway'),
            'manage_woocommerce',
            'monero_gateway',
            array($this, 'orders_page'),
            MONERO_GATEWAY_PLUGIN_URL.'/assets/images/monero-icon-admin.png',
            56 // Position on menu, woocommerce has 55.5, products has 55.6
        );

        add_submenu_page(
            'monero_gateway',
            __('Payments', 'monero_gateway'),
            __('Payments', 'monero_gateway'),
            'manage_woocommerce',
            'monero_gateway_payments',
            array($this, 'payments_page')
        );

        $settings_page = add_submenu_page(
            'monero_gateway',
            __('Settings', 'monero_gateway'),
            __('Settings', 'monero_gateway'),
            'manage_options',
            'monero_gateway_settings',
            array($this, 'settings_page')
        );
        add_action('load-'.$settings_page, array($this, 'settings_page_init'));
    }

    /**
     * Remove duplicate sub-menu item
     */
    public function admin_menu_update() {
        global $submenu;
        if (isset($submenu['monero_gateway'])) {
            unset($submenu['monero_gateway'][0]);
        }
    }

    /**
     * Monero payments page
     */
    public function payments_page() {
        $payments_list = new Monero_Admin_Payments_List();
        $payments_list->prepare_items();
        $payments_list->display();
    }

    /**
     * Monero settings page
     */
    public function settings_page() {
        WC_Admin_Settings::output();
    }

    public function settings_page_init() {
        global $current_tab, $current_section;

        $current_section = 'monero_gateway';
        $current_tab = 'checkout';

        // Include settings pages.
        WC_Admin_Settings::get_settings_pages();

        // Save settings if data has been posted.
        if (apply_filters("woocommerce_save_settings_{$current_tab}_{$current_section}", !empty($_POST))) {
            WC_Admin_Settings::save();
        }

        // Add any posted messages.
        if (!empty($_GET['wc_error'])) {
            WC_Admin_Settings::add_error(wp_kses_post(wp_unslash($_GET['wc_error'])));
        }

        if (!empty($_GET['wc_message'])) {
            WC_Admin_Settings::add_message(wp_kses_post(wp_unslash($_GET['wc_message'])));
        }

        do_action('woocommerce_settings_page_init');
    }

}

return new Monero_Admin_Interface();