#!/usr/local/jetapps/usr/bin/php83-cgi -q
<?php

use JetBackup\Core\Factory;
use JetBackup\Core\JetBackup;
use JetBackup\Core\Plugin\Plugin;
use JetBackup\Core\Data\Mongo;
use JetBackup\Core\Security\Security;
use JetBackup\Core\Exception\PluginException;

define('__JETBACKUP__', true);

require_once('/usr/local/jetapps/var/lib/jetbackup5/Core/JetBackup.inc');
require_once(JetBackup::CORE_PATH . '/autoload.inc');

$new_version=$argv[1];
$old_version=$argv[2];

$settings = Factory::getSettingsSecurity();
if(!$settings->getPlugin()) exit;

$list = Plugin::query()
    ->match(JetBackup::ID_FIELD, Mongo::getId($settings->getPlugin()))
    ->projection(Plugin::OPTIONS)
    ->projection(Plugin::CODE)
    ->getOne();

if(!$list->hasNext()) {
	$settings->setPlugin('');
    $settings->save();
    exit;
}

$next = $list->getNext();
if($next->{Plugin::CODE} !== 'Imunify360') exit;

if(version_compare($old_version, '2.0.0', '<')) {
	// Migration from v1.x: remove old hook paths
	exec('imunify360-agent hook delete --event malware-detected --path /usr/local/jetapps/usr/jetbackup5/plugins/security/imunify360');
	exec('imunify360-agent hook delete --event malware-cleanup --path /usr/local/jetapps/usr/jetbackup5/plugins/security/imunify360');

	$options = json_decode($next->{Plugin::OPTIONS});
	$settings->setRestore(!!$options->restoreFlag);
	$settings->setLock(!!$options->lockFlag);
}

if(version_compare($old_version, '2.1.3', '<')) {
	// Migration from v2.x up to 2.1.3: remove notifications-config registrations
	$script_path = JetBackup::BIN_PATH . '/security';
	$output = [];
	exec('imunify360-agent notifications-config show --json', $output);
	$config = json_decode(implode('', $output));
	if(isset($config->items->rules)) {
		$notification_events = ['USER_SCAN_MALWARE_FOUND', 'CUSTOM_SCAN_MALWARE_FOUND'];
		foreach($notification_events as $event) {
			if(!isset($config->items->rules->$event->SCRIPT->scripts)) continue;
			$scripts = (array) $config->items->rules->$event->SCRIPT->scripts;
			$key = array_search($script_path, $scripts);
			if($key === false) continue;
			unset($scripts[$key]);

			$update = json_encode([
				'rules' => [
					$event  => [
						'SCRIPT'    => [
							'enabled'   => $config->items->rules->$event->SCRIPT->enabled ?? true,
							'scripts'   => array_values($scripts)
						]
					]
				]
			]);

			exec("imunify360-agent notifications-config update '$update' --json");
		}
	}
}

$security = new Security($settings->getPlugin());

try {
	$security->activate();
} catch(PluginException $e) {
	$settings->setPlugin('');
}

$settings->save();

?>