<?php
/*
* SPEEDYCACHE
* https://speedycache.com/
* (c) SpeedyCache Team
*/

namespace SpeedyCache;

// Third Party Plugins
class Install{
	
	// Called during activation
	static function activate(){
		global $speedycache;
		
		if(empty($speedycache)){
			$speedycache = new \SpeedyCache();
		}
		
		$speedycache->options = get_option('speedycache_options', []);
		$speedycache->options['lbc'] = true;
		$speedycache->options['minify_css'] = true;
		$speedycache->options['gzip'] = true;

		update_option('speedycache_options', $speedycache->options);
		update_option('speedycache_version', SPEEDYCACHE_VERSION);

		\SpeedyCache\Htaccess::init();
		self::set_advanced_cache();
		\SpeedyCache\Util::set_config_file();
	}

	// Called during Deactivation
	static function deactivate(){

		if(is_file(ABSPATH.'.htaccess') && is_writable(ABSPATH.'.htaccess')){
			$htaccess = file_get_contents(ABSPATH.'.htaccess');
			$htaccess = preg_replace("/#\s?BEGIN\s?speedycache.*?#\s?END\s?speedycache/s", '', $htaccess);
			$htaccess = preg_replace("/#\s?BEGIN\s?Gzipspeedycache.*?#\s?END\s?Gzipspeedycache/s", '', $htaccess);
			$htaccess = preg_replace("/#\s?BEGIN\s?LBCspeedycache.*?#\s?END\s?LBCspeedycache/s", '', $htaccess);
			$htaccess = preg_replace("/#\s?BEGIN\s?WEBPspeedycache.*?#\s?END\s?WEBPspeedycache/s", '', $htaccess);
			$htaccess = preg_replace("/#\s?BEGIN\s?SpeedyCacheheaders.*?#\s?END\s?SpeedyCacheheaders/s", '', $htaccess);
			$htaccess = preg_replace('/\n\n+/', "\n\n", $htaccess); // Cleans extra white space which gets added
			@file_put_contents(ABSPATH.'.htaccess', $htaccess);
		}
		
		self::remove_constant();
		wp_clear_scheduled_hook('speedycache_preload');
		wp_clear_scheduled_hook('speedycache_purge_cache');
		wp_clear_scheduled_hook('speedycache_preload_split');
	}
	
	static function set_advanced_cache(){

		if(file_exists(WP_CONTENT_DIR . '/advanced-cache.php')){
			unlink(WP_CONTENT_DIR . '/advanced-cache.php');
		}

		if(!copy(SPEEDYCACHE_DIR . '/main/advanced-cache.php', WP_CONTENT_DIR . '/advanced-cache.php')){
			return;
		}

		// Adding WP_CACHE Constant
		self::add_constant();
	}

	// Adds WP_CACHE constant in wp-config.php
	static function add_constant(){
		$wp_config_file = ABSPATH . '/wp-config.php';

		if(!file_exists($wp_config_file) || !is_writable($wp_config_file)){
			return false;
		}

		$wp_config_content = file_get_contents($wp_config_file);

		if(empty($wp_config_content)){
			return;
		}

		// Removing if WP_CACHE is already placed
		$wp_config_content = preg_replace('/define\(\s*["\']WP_CACHE[\'\"].*/', '', $wp_config_content);
		
		// Adding the Constant
		$wp_config_content = preg_replace('/<\?php/', "<?php\ndefine('WP_CACHE', true); // Added by SpeedyCache\n", $wp_config_content);

		$wp_config_content = preg_replace('/\n\n+/', "\n\n", $wp_config_content); // Cleans extra white space which gets added
		
		file_put_contents($wp_config_file, $wp_config_content);
	}

	// Removes WP_CACHE Constant.
	static function remove_constant(){
		$wp_config_file = ABSPATH . '/wp-config.php';

		if(!file_exists($wp_config_file) || !is_writable($wp_config_file)){
			return false;
		}
		
		$wp_config_content = file_get_contents($wp_config_file);
		
		if(empty($wp_config_content)){
			return;
		}

		// Removing if WP_CACHE is already placed
		$wp_config_content = preg_replace('/define\(\s*["\']WP_CACHE[\'\"].*/', '', $wp_config_content);
		$wp_config_content = preg_replace('/\n\n+/', "\n\n", $wp_config_content); // Cleans extra white space which gets added

		file_put_contents($wp_config_file, $wp_config_content);
	}
	
	static function uninstall(){
		delete_option('speedycache_version'); 
		delete_option('speedycache_options');
		delete_option('speedycache_cdn');
		delete_option('speedycache_delete_cache_logs');
		delete_option('speedycache_img');
		delete_option('speedycache_object_cache');
		delete_option('speedycache_ccss_logs');
		delete_option('speedycache_license');
		
		if(defined('SPEEDYCACHE_PRO')){
			\SpeedyCache\Util::delete_cwebp();
		}
	}

}
