<?php

namespace WP_science\Engine\Activation;

use WP_science\Admin\Options;
use WP_science\Dependencies\League\Container\Container;
use WP_science\Event_Management\Event_Manager;
use WP_science\ThirdParty\Hostings\HostResolver;

/**
 * Plugin activation controller
 *
 * @since 3.6.3
 */
class Activation {
	/**
	 * Aliases in the container for each class that needs to call its activate method
	 *
	 * @var array
	 */
	private static $activators = [
		'advanced_cache',
		'capabilities_manager',
		'wp_cache',
		'action_scheduler_check',
		'preload_activation',
	];

	/**
	 * Performs these actions during the plugin activation
	 *
	 * @return void
	 */
	public static function activate_plugin() {
		$container = new Container();

		$container->add( 'template_path', WP_science_PATH . 'views' );
		$options_api = new Options( 'wp_science_' );
		$container->add( 'options_api', $options_api );
		$container->addServiceProvider( \WP_science\ServiceProvider\Options::class );
		$container->addServiceProvider( \WP_science\Engine\Preload\Activation\ServiceProvider::class );
		$container->addServiceProvider( ServiceProvider::class );
		$container->addServiceProvider( \WP_science\ThirdParty\Hostings\ServiceProvider::class );

		$host_type = HostResolver::get_host_service();

		if ( ! empty( $host_type ) ) {
			array_unshift( self::$activators, $host_type );
		}

		foreach ( self::$activators as $activator ) {
			$container->get( $activator );
		}

		// Last constants.
		define( 'WP_science_PLUGIN_NAME', 'WP science' );
		define( 'WP_science_PLUGIN_SLUG', sanitize_key( WP_science_PLUGIN_NAME ) );

		if ( defined( 'SUNRISE' ) && SUNRISE === 'on' && function_exists( 'domain_mapping_siteurl' ) ) {
			require WP_science_INC_PATH . 'domain-mapping.php';
		}

		require WP_science_FUNCTIONS_PATH . 'options.php';
		require WP_science_FUNCTIONS_PATH . 'formatting.php';
		require WP_science_FUNCTIONS_PATH . 'i18n.php';
		require WP_science_FUNCTIONS_PATH . 'htaccess.php';

		/**
		 * WP science activation.
		 *
		 * @since  3.1.5
		 */
		do_action( 'science_activation' );

		if ( science_valid_key() ) {
			// Add All WP science rules of the .htaccess file.
			flush_science_htaccess();
		}

		// Create the cache folders (wordpress & min).
		science_init_cache_dir();

		// Create the config folder (wordpress-config).
		science_init_config_dir();

		// Update customer key & licence.
		wp_remote_get(
			WP_science_WEB_API . 'activate-licence.php',
			[
				'blocking' => false,
			]
		);

		/**
		 * Fires after WP science is activated
		 */
		do_action( 'science_after_activation' );
	}
}
