<?php

namespace ElementPack\Includes\MegaMenu;

defined('ABSPATH') || exit;

class Mega_Menu_Init {
	public $dir;
	public $url;

	public static $megamenu_options_key   = '_ep_mega_menu_options';
	public static $megamenu_settings_key  = '_ep_mega_menu_settings';
	public static $menu_item_settings_key = '_ep_mega_menu_item_settings';

	public function __construct() {

		add_action('admin_enqueue_scripts', [$this, 'ep_megamenu_load_assets']);
		add_action('wp_ajax_ep_get_menu_item_settings', [$this, 'ep_get_menu_item_settings']);
		add_action('wp_ajax_ep_save_menu_item_settings', [$this, 'ep_save_menu_item_settings']);
		add_action('wp_ajax_ep_get_content_editor', [$this, 'ep_get_content_editor']);

		$this->ep_megamenu_includes_files();
	}

	public function ep_megamenu_includes_files() {

		// Include the Handler API base class
		include_once BDTEP_PATH . 'base/handler-api.php';
		include $this->dir . 'class-mega-menu-options.php';
		include $this->dir . 'class-mega-menu-cpt.php';
		include $this->dir . 'class-mega-menu-walker.php';
		include $this->dir . 'class-mega-menu-api.php';
	}

	/**
	 * !enqueue assets
	 */
	public function ep_megamenu_load_assets() {
		$current_screen = get_current_screen();

		if ($current_screen->base == 'nav-menus') {
			$this->enqueue_styles();
			$this->enqueue_scripts();
		}
	}

	public function enqueue_styles() {
		wp_enqueue_style('wp-color-picker');
		wp_enqueue_style('aesthetic-icon-picker', BDTEP_ADMIN_URL . 'assets/vendor/aesthetic-icon-picker/css/style.css', false, BDTEP_VER);
		wp_enqueue_style('ep-megamenu-admin', BDTEP_ADMIN_URL . 'assets/css/ep-megamenu-admin.css', false, BDTEP_VER);
		wp_enqueue_style('font-awesome', ELEMENTOR_ASSETS_URL . 'lib/font-awesome/css/all.min.css', false, '5.15.3');
	}

	public function enqueue_scripts() {
		wp_enqueue_script('aesthetic-icon-picker', BDTEP_ADMIN_URL . 'assets/vendor/aesthetic-icon-picker/js/aesthetic-icon-picker.js', ['jquery'], BDTEP_VER, true);
		wp_enqueue_script('ep-megamenu-admin', BDTEP_ADMIN_URL . 'assets/js/ep-megamenu-admin.min.js', ['jquery', 'wp-color-picker'], BDTEP_VER, true);
		wp_localize_script('ep-megamenu-admin', 'megaMenuBuilder', [
			'items' => $this->mega_menu_items(),
			'nonce' => wp_create_nonce('ep_megamenu_nonce'),
		]);
	}

	private function mega_menu_items() {
		$args = [
			'post_type'      => 'nav_menu_item',
			'post_status'    => 'publish',
			'posts_per_page' => -1,
			'nopaging'       => true,
			'fields'         => 'ids',
		];
		$items = new \WP_Query($args);

		$menuItems = [];

		foreach ($items->posts as $item) {
			$data = get_post_meta($item, Mega_Menu_Init::$menu_item_settings_key, true);
			$data = (array) json_decode($data);

			if (isset($data['menu_enable']) && $data['menu_enable'] == 1) {
				$menuItems[] = "#menu-item-" . $item;
			}
		}

		return $menuItems;
	}

	public function ep_save_menu_item_settings() {

		if (!current_user_can('manage_options')) {
			wp_send_json_error(esc_html__('Permission denied', 'bdthemes-element-pack'));
			return;
		}

		// Verify nonce
		if (!wp_verify_nonce($_REQUEST['nonce'], 'ep_megamenu_nonce')) {
			wp_send_json_error(esc_html__('Security check failed', 'bdthemes-element-pack'));
			return;
		}

		$menu_item_id       = sanitize_key($_REQUEST['settings']['menu_id']);
		$menu_item_settings = json_encode($_REQUEST['settings'], JSON_UNESCAPED_UNICODE);
		update_post_meta($menu_item_id, Mega_Menu_Init::$menu_item_settings_key, $menu_item_settings);

		$data = [
			'menu_id' => $menu_item_id,
			'saved'   => 1,
			'message' => esc_html__('Successfully Saved', 'bdthemes-element-pack'),
		];

		wp_send_json($data);
	}

	public function ep_get_menu_item_settings() {

		if (!current_user_can('manage_options')) {
			return;
		}

		$menu_item_id = sanitize_key($_REQUEST['menu_id']);
		$data         = get_post_meta($menu_item_id, Mega_Menu_Init::$menu_item_settings_key, true);
		if (empty($data)) {
			$data = [
				'menu_id'        => $menu_item_id,
				'menu_has_child' => '',
				'menu_enable'    => '',
			];
			$data = wp_json_encode($data, true);
		}

		echo wp_kses_post($data);
		wp_die();
	}

	public function get_page_by_title_query($title, $post_type = 'page') {
		// Set up the query arguments
		$args = [
			'post_type'      => $post_type,
			'title'          => $title,
			'posts_per_page' => 1,
			'post_status'    => 'publish',
		];

		// Create a new WP_Query instance
		$query = new \WP_Query($args);

		// Check if the query returns any posts
		if ($query->have_posts()) {
			// Get the first post
			$query->the_post();
			$page = $query->post;

			// Reset post data
			wp_reset_postdata();

			// Return the page object
			return $page;
		} else {
			// No posts found, return null
			return null;
		}
	}

	public function ep_get_content_editor() {

		if (!current_user_can('manage_options')) {
			wp_send_json_error(esc_html__('Permission denied', 'bdthemes-element-pack'));
			return;
		}

		if (!isset($_REQUEST['nonce']) || !wp_verify_nonce(sanitize_key($_REQUEST['nonce']), 'ep_megamenu_nonce')) {
			wp_send_json_error(esc_html__('Security check failed', 'bdthemes-element-pack'));
			return;
		}

		$content_key = sanitize_key($_REQUEST['key']);

		$builder_post_title = 'bdt-ep-megamenu-content-' . $content_key;
		$builder_post_id    = $this->get_page_by_title_query($builder_post_title, 'ep_megamenu_content');

		if (is_null($builder_post_id)) {
			$defaults = [
				'post_type'    => 'ep_megamenu_content',
				'post_status'  => 'publish',
				'post_title'   => $builder_post_title,
				'post_content' => '',
			];
			$builder_post_id = wp_insert_post($defaults);

			update_post_meta($builder_post_id, '_wp_page_template', 'elementor_canvas');
		} else {
			$builder_post_id = $builder_post_id->ID;
		}

		$url = get_admin_url() . 'post.php?post=' . $builder_post_id . '&action=elementor';
		echo esc_url_raw($url);
		wp_die();
	}


	public static function init() {
		new Mega_Menu_Init;
	}
}

/**
 * Initialize Element Pack Mega Menu
 */
Mega_Menu_Init::init();
