<?php
defined('ABSPATH') or die('No script kiddies please!'); // prevent direct access
if (!class_exists('AF_themes_info')) {
  class AF_themes_info
  {
    /**
     * Version
     *
     * @var string $version Class version.
     *
     * @since 1.0.0
     */
    private $version = '1.0.1';

    const templatespare_old_version = '2.3.0';

    /**
     * Theme name.
     *
     * @var string $theme_name Theme name.
     *
     * @since 1.0.0
     */
    private $theme_name;

    private $current_user_name;
    private $theme_version;
    private $menu_name;
    private $page_name;
    private $page_slug;

    /**
     * Theme slug.
     *
     * @var string $theme_slug Theme slug.
     *
     * @since 1.0.0
     */
    private $theme_slug;
    private $config;

    public function __construct()
    {
      $theme = wp_get_theme();
      $this->theme_name = $theme->get('Name');
      $this->theme_version = $theme->get('Version');
      $this->theme_slug = $theme->get_template();
      $this->menu_name = isset($this->config['menu_name']) ? $this->config['menu_name'] : $this->theme_name;
      $this->page_name = isset($this->config['page_name']) ? $this->config['page_name'] : $this->theme_name;
      $this->page_slug = $this->theme_slug;
      add_action('admin_menu', array($this, 'newspare_register_info_page'));
      add_action('admin_enqueue_scripts', array($this, 'newspare_register_backend_scripts'));
      add_action('init', array($this, 'newspare_load_files'));
      add_filter('admin_body_class', array($this, 'newspare_body_classes'));

      $current_user = wp_get_current_user();
      $this->current_user_name = $current_user->user_login;
    }



    function newspare_body_classes($classes)
    {
      // Normalize in case another filter passed an array by mistake
      if (is_array($classes)) {
        $classes = implode(' ', $classes);
      }

      if (isset($_GET['page'])) {
        $page = sanitize_text_field(wp_unslash($_GET['page']));

        if (
          $page === 'aft-block-patterns' ||
          $page === 'aft-template-kits' ||
          $page === $this->theme_slug ||
          $page === 'starter-sites'
        ) {
          $classes .= ' aft-admin-dashboard-notice aft-theme-admin-menu-dashboard';
        }
      }

      return trim($classes);
    }

    public function newspare_register_info_page()
    {
      // Show only for admins (change capability if needed)
      if (!current_user_can('manage_options')) {
        return;
      }
      // Add info page.
      
      $starter_template_slug = 'aft-block-patterns';
      $template_kits_slug = 'aft-template-kits';
      $starter_sites_order = 2;
      $afthemes_icon = 'data:image/svg+xml;base64, ';

      add_menu_page(
        $this->menu_name, // Page Title.
        $this->menu_name, // Menu Title.
        'edit_theme_options', // Capability.
        'newspare', // Menu slug.
        array($this, 'newspare_render_page'), // Action.
        $afthemes_icon,
        30
      );


      // Our getting started page.
      add_submenu_page(
        'newspare', // Parent slug.
        __('Theme Dashboard', 'newspare'), // Page title.
        __('Home', 'newspare'), // Menu title.
        'edit_theme_options', // Capability.
        'newspare', // Menu slug.
        array($this, 'newspare_render_page'), // Callback function.
        // $get_started_order
      );


      add_submenu_page(
        'newspare',
        __('Site Editor', 'newspare'), // page title (technical is fine here)
        __('Edit Site', 'newspare'),   // menu label (user-friendly)
        'edit_theme_options',
        'site-editor.php'
    );

      // Our getting started page.
      add_submenu_page(
        'newspare', // Parent slug.
        __('Import Starter Site', 'newspare'), // Page title.
        __('Import Starter Site', 'newspare'), // Menu title.
        'edit_theme_options', // Capability.
        'starter-sites', // Menu slug.
        array($this, 'newspare_render_starter_sites'), // Callback function.
        // $starter_sites_order
      );

      add_submenu_page(
        'newspare', // Parent slug.
        __('Design Library', 'newspare'), // Page title.
        __('Design Library', 'newspare'), // Menu title.
        'edit_theme_options', // Capability.
        $starter_template_slug, // Menu slug.
        array($this, 'newspare_render_starter_templates'), // Callback function.
        // $starter_sites_order
      );

      add_submenu_page(
        'newspare', // Parent slug.
        __('Elementor Templates', 'newspare'), // Page title.
        __('Elementor Templates', 'newspare'), // Menu title.
        'edit_theme_options', // Capability.
        $template_kits_slug, // Menu slug.
        array($this, 'newspare_render_templates_kits'), // Callback function.
        // $starter_sites_order
      );


      // Our getting started page.
      add_submenu_page(
        'newspare', // Parent slug.
        __('Support', 'newspare'), // Page title.
        __('Support', 'newspare'), // Menu title.
        'edit_theme_options', // Capability.
        'https://afthemes.com/supports/'

      );

      // Our getting started page.
      add_submenu_page(
        'newspare', // Parent slug.
        __('Get Pro', 'newspare'), // Page title.
        '<span id="aft-upgrade-menu-item">' . __('Get Pro', 'newspare') . '</span>', // Menu title.
        'edit_theme_options', // Capability. 
        'https://afthemes.com/products/newspare'

      );
      //add_theme_page( $this->menu_name, $this->page_name, 'activate_plugins', $this->page_slug, array( $this, 'newspare_render_page' ), 1 );
    }



    public function newspare_render_page()
    { ?>
      <div id="af-theme-dashboard"></div>
      <?php }

    public function newspare_render_starter_sites()
    {
      $newspare_templatespare_installed = newspare_get_plugin_file('templatespare');
      $newspare_templatespare_verison = '';

      if (!empty($newspare_templatespare_installed)) {
        $newspare_templatespare_info = get_plugin_data(WP_PLUGIN_DIR . '/' . $newspare_templatespare_installed);
        $newspare_templatespare_verison = $newspare_templatespare_info['Version'];
      }

      $newspare_templatespare_active = is_plugin_active('templatespare/templatespare.php');
      $install = [];
      $activate = [];
      if ($newspare_templatespare_installed == null) {
        $install = ['templatespare'];
      }

      if ($newspare_templatespare_active == false && $newspare_templatespare_installed != null) {
        $activate = ['templatespare'];
      }
      $plugin_update = 'false';
      if (!empty($newspare_templatespare_verison) && $newspare_templatespare_verison < self::templatespare_old_version) {
        $plugin_update = 'true';
      }

      if (($newspare_templatespare_installed && $newspare_templatespare_active) && $plugin_update == 'false') {
      ?>
        <div id="newspare-starter-sites-lists"></div>
      <?php
      } else {
        wp_enqueue_style('templatespare');
        $message = '';

        if (!empty($newspare_templatespare_verison) && $newspare_templatespare_active && $newspare_templatespare_verison < self::templatespare_old_version) {
          $class = admin_url('plugins.php');

          $message = __('The Templatespare plugin should be updated to the latest version', 'newspare');
        } else {
          $class = 'false';
          $message = __('Import a Starter Site, Personalize, and Live it in 3 Easy Steps!', 'newspare');
        }
      ?>
        <div id="templatespare-plugin-install-activate" data-class=<?php echo $class; ?> current-theme=<?php echo esc_attr($this->theme_slug) ?> install=<?php echo json_encode($install); ?> activate=<?php echo json_encode($activate); ?> data-plugin-page='starter-sites' message='<?php echo $message; ?>' ispro=''></div>
      <?php
      }
    }

    public function newspare_render_starter_templates()
    {

      $newspare_blockspare_installed = newspare_get_plugin_file('blockspare-pro');
      $install = [];
      $activate = [];
      $newspare_blockspare_verison = '';
      $newspare_check_blockspare = $this->newspare_check_blockspare_free_pro_activated();
      $newspare_blockspare_status = 'free';
      if (!empty($newspare_blockspare_installed) && $newspare_check_blockspare == 'pro') {
        $newspare_blockspare_status = 'pro';
        $newspare_blockspare_old_version = '4.1.3';
        $newspare_blockspare_pro_info = get_plugin_data(WP_PLUGIN_DIR . '/' . $newspare_blockspare_installed);
        $newspare_blockspare_verison = $newspare_blockspare_pro_info['Version'];
        $newspare_blockspare_active = is_plugin_active($newspare_blockspare_installed);

        if ($newspare_blockspare_active == false && $newspare_blockspare_installed != null) {
          $activate[] = 'blockspare-pro';
        }
      } else {

        $newspare_blockspare_installed = newspare_get_plugin_file('blockspare');
        $newspare_blockspare_old_version = '3.1.0';

        if (!empty($newspare_blockspare_installed)) {
          $newspare_blockspare_info = get_plugin_data(WP_PLUGIN_DIR . '/' . $newspare_blockspare_installed);
          $newspare_blockspare_verison = $newspare_blockspare_info['Version'];
          $newspare_blockspare_active = is_plugin_active('blockspare/blockspare.php');

          if ($newspare_blockspare_active == false && $newspare_blockspare_installed != null) {
            $activate[] = 'blockspare';
          }
        } else {
          if ($newspare_blockspare_installed == null) {
            $install[] = 'blockspare';
          }
        }
      }

      $plugin_update = 'false';
      if (!empty($newspare_blockspare_verison) && $newspare_blockspare_verison < $newspare_blockspare_old_version) {
        $plugin_update = 'true';
      }

      if (($newspare_blockspare_installed && $newspare_blockspare_active) && $plugin_update == 'false') {

      ?>
        <div id="bs-dashboard"></div>


      <?php
      } else {
        $message = '';
        wp_enqueue_style('templatespare');
        if (!empty($newspare_blockspare_verison) && $newspare_blockspare_active && $newspare_blockspare_verison < $newspare_blockspare_old_version) {
          $class = admin_url('plugins.php');

          $message = sprintf(
            __('Blockspare plugin version should be more than %s.', 'newspare'),
            $newspare_blockspare_old_version
          );
        } else {
          $class = 'false';
          $message = __('One-click Import, No Coding Hassle!', 'newspare');
        }

      ?>
        <div id="templatespare-plugin-install-activate" data-class="<?php echo $class; ?>" current-theme='blockspare' install=<?php echo json_encode($install); ?> activate=<?php echo json_encode($activate); ?> data-plugin-page="aft-block-patterns" message='<?php echo $message; ?>' isPro='<?php echo esc_attr($newspare_blockspare_status); ?>'></div>
<?php
      }
    }

    public function newspare_render_templates_kits()
    {
      $install = [];
      $activate = [];
      $newspare_elespare_installed = newspare_get_plugin_file('elespare-pro');
      $newspare_elementor_pro_installed = newspare_get_plugin_file('elementor-pro');
      $newspare_elementor_installed = newspare_get_plugin_file('elementor');

      if ($newspare_elementor_pro_installed) {
        $activate[] = 'elementor-pro';
      }
      if ($newspare_elementor_installed) {
        $activate[] = 'elementor';
      } else {
        $install[] = 'elementor';
      }

      $newspare_elespare_verison = '';
      $newspare_check_elespare = $this->newspare_check_elespare_free_pro_activated();
      $newspare_elespare_status = 'free';
      if (!empty($newspare_elespare_installed) && $newspare_check_elespare == 'pro') {
        $newspare_elespare_status = 'pro';
        $newspare_elespare_old_version = '2.5.0';
        $newspare_elespare_pro_info = get_plugin_data(WP_PLUGIN_DIR . '/' . $newspare_elespare_installed);
        $newspare_elespare_verison = $newspare_elespare_pro_info['Version'];
        $newspare_elespare_active = is_plugin_active($newspare_elespare_installed);

        if ($newspare_elespare_active == false && $newspare_elespare_installed != null) {
          $activate[] = 'elespare-pro';
        }
      } else {

        $newspare_elespare_installed = newspare_get_plugin_file('elespare');
        $newspare_elespare_old_version = '2.2.0';

        if (!empty($newspare_elespare_installed)) {
          $newspare_elespare_info = get_plugin_data(WP_PLUGIN_DIR . '/' . $newspare_elespare_installed);
          $newspare_elespare_verison = $newspare_elespare_info['Version'];
          $newspare_elespare_active = is_plugin_active('elespare/elespare.php');

          if ($newspare_elespare_active == false && $newspare_elespare_installed != null) {
            $activate[] = 'elespare';
          }
        } else {
          if ($newspare_elespare_installed == null) {
            $install[] = 'elespare';
          }
        }
      }

      $plugin_update = 'false';
      if (!empty($newspare_elespare_verison) && $newspare_elespare_verison < $newspare_elespare_old_version) {
        $plugin_update = 'true';
      }

      if (($newspare_elespare_installed && $newspare_elespare_active) && $plugin_update == 'false' && is_plugin_active($newspare_elementor_installed)) {
        echo '<div id="elespare-demo-list"></div>';
      } else {
        wp_enqueue_style('templatespare');
        $message = (!empty($newspare_elespare_verison) && $newspare_elespare_active && $newspare_elespare_verison < $newspare_elespare_old_version)
          ? sprintf(__('Elespare plugin version should be more than %s.', 'newspare'), $newspare_elespare_old_version)
          : __('One-click Import, No Coding Hassle!', 'newspare');
        $class = (!empty($newspare_elespare_verison) && $newspare_elespare_active && $newspare_elespare_verison < $newspare_elespare_old_version)
          ? admin_url('plugins.php')
          : 'false';
        echo '<div id="templatespare-plugin-install-activate" data-class="' . esc_attr($class) . '" current-theme="elespare" install="' . esc_attr(json_encode($install)) . '" activate="' . esc_attr(json_encode($activate)) . '" data-plugin-page="aft-template-kits" message="' . esc_attr($message) . '" isPro="' . esc_attr($newspare_elespare_status) . '"></div>';
      }
    }


    public function newspare_register_backend_scripts()
    {

      // Get the last modified time of the file.
      $newspare_file_modified_time = filemtime(get_template_directory() . '/admin-dashboard/dist/admin_dashboard.build.js');

      // Append the modified time as a timestamp to the version.
      $newspare_version_with_timestamp = '4.7.5' . $newspare_file_modified_time;
      wp_enqueue_style('plugin-installer-style', get_template_directory_uri() . '/admin-dashboard/dist/style-admin_dashboard.css', '', $newspare_version_with_timestamp, 'all');
      wp_register_style('templatespare', get_template_directory_uri() . '/admin-dashboard/dist/blocks.editor.build.css', '', $newspare_version_with_timestamp, 'all');
      wp_enqueue_script(
        'aftheme-dashboard', // Handle.
        get_template_directory_uri() . '/admin-dashboard/dist/admin_dashboard.build.js',
        array('react', 'react-dom', 'wp-api-fetch', 'wp-element'), // Dependencies, defined above.
        $newspare_version_with_timestamp,
        true
      );

      $changelog = $this->newspare_get_latest_changelog();
      $dahboard_path = get_template_directory_uri() . '/admin-dashboard/plugin-imgs';
      $siteUrl = site_url();
      $theme = wp_get_theme();

      $newspare_templatespare_installed = newspare_check_file_extension('templatespare/templatespare.php');
      $newspare_templatespare_active = is_plugin_active('templatespare/templatespare.php');

      if ($newspare_templatespare_installed && $newspare_templatespare_active) {
        $has_plugins = true;
      } else {
        $has_plugins = false;
      }

      $aft_get_starter_plugins = $this->newspare_get_plugins_list_data();

      wp_localize_script(
        'aftheme-dashboard',
        'afDashboardData',
        [
          'admin_url' => admin_url(),
          'site_editor' => admin_url('site-editor.php'),
          'customizer_url' => admin_url('/customize.php?autofocus'),
          'changelog' => $changelog,
          'dahboard_path' => $dahboard_path,
          'siteUrl' => $siteUrl,
          'aflogoUrl' => get_template_directory_uri(),
          "themeUrl" => (!is_child_theme()) ? get_template_directory_uri() : get_stylesheet_directory_uri(),
          "themeName" => $this->theme_name,
          "themeSlug" => $this->page_slug,
          "themeVesrion" => $this->theme_version,
          "currentUser" => $this->current_user_name,
          'has_templatespare' => $has_plugins,
          'templatespare_install' => $newspare_templatespare_installed ? [] : json_encode(['templatespare']),
          'templatespare_active' => $newspare_templatespare_active ? [] : json_encode(['templatespare']),
          'admindashboarddata' => $aft_get_starter_plugins,
          'theme_img' => get_template_directory_uri() . '/admin-dashboard/assets/images/theme.png',
          'externalUrl' => 'https://raw.githubusercontent.com/afthemes/elespare-demo-data/master/free',
          'starter_sites' => get_template_directory_uri() . '/admin-dashboard/assets/images/starter-sites.jpg',
          'block_patterns' => get_template_directory_uri() . '/admin-dashboard/assets/images/block-patterns.jpg',
          'template_kits' => get_template_directory_uri() . '/admin-dashboard/assets/images/template-kits.jpg',
          'can_manage_options' => current_user_can('manage_options'),

        ]
      );

      wp_enqueue_script('plugin-installer', get_template_directory_uri() . '/admin-dashboard/dist/plugin_installer.build.js', array('jquery', 'aftheme-dashboard'));
      wp_enqueue_script('templatespare-installer', get_template_directory_uri() . '/admin-dashboard/dist/templatespare_plugin.build.js', array('jquery', 'aftheme-dashboard'));
      wp_localize_script('plugin-installer', 'aft_installer_localize', array(
        'ajax_url' => admin_url('admin-ajax.php'),
        'admin_nonce' => wp_create_nonce('aft_installer_nonce'),
        'install_now' => __('Are you sure you want to install this plugin?', 'newspare'),
        'install_btn' => __('Install Now', 'newspare'),
        'activate_btn' => __('Activate', 'newspare'),
        'installed_btn' => __('Activated', 'newspare'),
      ));

      
    }

    public function newspare_get_latest_changelog()
    {
      $readme = null;
      $access_type = get_filesystem_method();

      if ($access_type === 'direct') {
        $creds = request_filesystem_credentials(
          site_url() . '/wp-admin/',
          '',
          false,
          false,
          []
        );

        if (WP_Filesystem($creds)) {
          global $wp_filesystem;

          $readme = $wp_filesystem->get_contents(
            get_template_directory() . '/changelog.txt'
          );
        }

        $newchangelog = str_replace("###", "", $readme);
        $newchangelog = str_replace("Changes:", "", $newchangelog);
        $newchangelog = str_replace("*", "", $newchangelog);

        $newchangelogs = explode("###", $newchangelog);

        $changelog = '';

        foreach (array_filter($newchangelogs) as $key => $val) {

          if (!empty($val)) {
            $changelog .= $val;
          }
        }
      }

      return $changelog;
    }

    public function newspare_load_files()
    {
      require_once get_template_directory() . '/admin-dashboard/rest-api/api-request.php';
      require_once get_template_directory() . '/admin-dashboard/rest-api/class-admin-notice.php';
      require_once get_template_directory() . '/admin-dashboard/rest-api/class-ajaxcall.php';
      
    }

    public function newspare_get_plugins_list_data()
    {

      $plugins = apply_filters('aft_plugins_for_starter_sites', array("blockspare", "templatespare"));
      $newspare_templatespare_subtitle = '';

      $activate_plugins = [];
      $install_plugin = [];
      $blocksapre_pro = 'blockspare-pro';
      $is_blockspare_pro = newspare_get_plugin_file($blocksapre_pro);
      $check_blockspare = $this->newspare_check_blockspare_free_pro_activated();

      if ($check_blockspare == 'pro' && $is_blockspare_pro != null) {
        unset($plugins[array_search('blockspare', $plugins)]);
        array_push($plugins, $blocksapre_pro);
      }

      if (!empty($plugins)) {
        foreach ($plugins as $key => $plugin) {

          $main_plugin_file = newspare_get_plugin_file($plugin); // Get main plugin file

          if (!empty($main_plugin_file)) {

            if (!is_plugin_active($main_plugin_file)) {

              $btn_class = 'aft-bulk-active-plugin-installer';
              $newspare_templatespare_url = '#';
              $activate_plugins[] = $plugin;
            }
          } else {
            $install_plugin[$key] = $plugin;
            $btn_class = 'aft-bulk-plugin-installer';
            $newspare_templatespare_url = "#";
          }
        }
      }

      if (empty($activate_plugins) && empty($install_plugin)) {
        $btn_class = '';
        $newspare_templatespare_url = site_url() . '/wp-admin/admin.php?page=starter-sites';
        //$newspare_templatespare_subtitle = __( 'The "Get Started" action will install/activate the AF Companion and Blockspare plugins for Starter Sites and Templates.', 'newspare' );
        $newspare_templatespare_title = __('Get Starter Sites', 'newspare');
      } else {

        $btn_class = 'aft-bulk-active-plugin-installer';
        $newspare_templatespare_url = '#';
        $newspare_templatespare_title = __('Get Started', 'newspare');
        $newspare_templatespare_subtitle = __('The "Get Started" action will install/activate the Templatespare and Blockspare plugins for Starter Sites and Templates.', 'newspare');
      }

      return array(
        'templatespare_title' => $newspare_templatespare_title,
        'templatespare_subtitle' => $newspare_templatespare_subtitle,
        'activate_plugins' => json_encode($activate_plugins),
        'install_plugin' => json_encode($install_plugin),
        'btn_class' => $btn_class,
        'templatespare_url' => $newspare_templatespare_url,

      );
    }

    public function newspare_check_blockspare_free_pro_activated()
    {
      $newspare_blockspare_pro_installed = newspare_get_plugin_file('blockspare-pro');
      $newspare_blockspare_free_installed = newspare_get_plugin_file('blockspare');

      if (!empty($newspare_blockspare_free_installed) && is_plugin_active($newspare_blockspare_free_installed)) {
        $flag = 'free';
      } elseif (!empty($newspare_blockspare_pro_installed) && !is_plugin_active($newspare_blockspare_pro_installed)) {
        $flag = 'pro';
      } elseif (!empty($newspare_blockspare_pro_installed) && is_plugin_active($newspare_blockspare_pro_installed)) {
        $flag = 'pro';
      } else {
        $flag = 'free';
      }
      return $flag;
    }
    public function newspare_check_elespare_free_pro_activated()
    {
      $newspare_elespare_pro_installed = newspare_get_plugin_file('elespare-pro');
      $newspare_elespare_free_installed = newspare_get_plugin_file('elespare');
      if (!empty($newspare_elespare_free_installed) && is_plugin_active($newspare_elespare_free_installed)) {
        $flag = 'free';
      } elseif (!empty($newspare_elespare_pro_installed) && !is_plugin_active($newspare_elespare_pro_installed)) {
        $flag = 'pro';
      } elseif (!empty($newspare_elespare_pro_installed) && is_plugin_active($newspare_elespare_pro_installed)) {
        $flag = 'pro';
      } else {
        $flag = 'free';
      }
      return $flag;
    }
  }

  $aft_dashboard = new AF_themes_info;
}
