###
# ~~~~~~licensing~~~~~~
# platform
# ==========
# Copyright (C) 2020 - 2021 EmDev LLC
# ==========
# Licensed under the Apache License, Version 2.0 (the "License");
# you may not use this file except in compliance with the License.
# You may obtain a copy of the License at
# 
#      http://www.apache.org/licenses/LICENSE-2.0
# 
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.
# ~~~~~~/licensing~~~~~~
###
echo 
echo
echo "************"
echo "Welcome to Entaxy platform installation script"
echo "************"

echo
echo "** Checking feature repository: ru.entaxy.esb/platform/${project.version}/xml/features ..."

_repo = (feature:repo-list | grep ru.entaxy.esb/platform/)
_repo_length = ($_repo length)
if { $_repo_length'' equals "0" } {
	echo "\>\> Installing Entaxy repository..."
	feature:repo-add mvn:ru.entaxy.esb/platform/${project.version}/xml/features
	echo "\>\> ... installed"
} else {
	echo "\>\> Entaxy repository is already installed"
}

echo
echo "** Checking entaxy-underlying-configuration feature ..."

service = (service:get org.apache.karaf.features.FeaturesService)

_config_feature = ($service getFeature entaxy-underlying-configuration)
_config_id = $_config_feature getId
_status = ($service getState $_config_id) toString

_in_shutdown = "0"

if { $_status equals "Uninstalled" } {
	echo "\>\> Installing feature..."
	feature:install entaxy-underlying-configuration
	echo "\>\> ... installed"
	echo
	if { $1'' equals "skipReboot" } {
		echo "** the system will skip reboot for applying JRE exports"	
		echo " \( see etc/jre.properties \)"
		echo " due to 'skipReboot argument'"
		echo "** If further installation will fail with errors please reboot"
	} else {
		echo "** the system will reboot now to apply JRE exports"
		echo " \( see etc/jre.properties \)"
		echo
		echo "** PLEASE RUN THE SCRIPT AGAIN AFTER RESTART **"
		_in_shutdown = "1"
		shutdown -r -f
	}
} else {
	echo "\>\> Entaxy configuration is already installed"
}

if { $_in_shutdown equals "0" } {

	echo
	_status = ( ($service getState $_config_id) toString )

	if { NOT { $_status equals "Started" } } {
		echo "** Current configuration feature status is not [Started]"
		echo "** Please check the feature [entaxy-underlying-configuration]"
		echo "or clean the container and run installation again "
	} else {
		echo "** Installing Entaxy subplatform components in silent mode..."
		
		echo "*** entaxy-karaf-basic .."
		_basic_feature =  ($service getFeature entaxy-karaf-basic)
		_basic_id = $_basic_feature getId
		_basic_status = ( ($service getState $_basic_id) toString )
		if { NOT { $_basic_status equals "Started" } } {
			try { feature:install entaxy-karaf-basic } { echo ".. ERROR" } { echo ".. done" }
		} else {
			echo ".. already installed"
		}

		echo "*** entaxy-karaf-runtime .."
	
		_runtime_feature =  ($service getFeature entaxy-karaf-runtime)
		_runtime_id = $_runtime_feature getId
		_runtime_status = ( ($service getState $_runtime_id) toString )
		if { NOT { $_runtime_status equals "Started" } } {
			echo 
			echo "** NOTICE **"
			echo "   Karaf will refresh bundles during install, so the script may be terminated"
			echo "   if you see karaf prompt or any other information on the screen"
			echo "   PLEASE RUN THE SCRIPT AGAIN"
			echo "** ** **"
			echo 
			sleep 10
			try { feature:install entaxy-karaf-runtime } { echo ".. ERROR" } { echo ".. done" }
		} else {
			echo ".. already installed"
		}
		
		while { NOT { $_runtime_status equals "Started" } } {
			echo "... waiting ..."
			sleep 5
			_runtime_status = ( ($service getState $_runtime_id) toString )
		}
		echo "\>\> ... installed"
		echo
		echo "** Installing Entaxy platform in verbose mode..."
		
		_platform_feature =  ($service getFeature entaxy-platform)
		_platform_id = $_platform_feature getId
		_status = ( ($service getState $_platform_id) toString )
		if { $_status equals "Uninstalled" } {
			feature:install -v -r entaxy-platform
			echo
			echo "\>\> ... installed"
		} else {
			echo "\>\> Entaxy platform is already installed"
		}
	}
	
	echo
	echo "Inactive bundles:"
	inactive
	echo
	echo "** NOTICE **"
	echo "   If you see some bundles above in [Failure] or [GracePeriod] state please"
	echo "      (a) restart (bundle:stop and bundle:start) bundles in [Failure] state "
	echo "   or"
	echo "      (b) restart the container "
	echo "** ** **"
	echo
	echo "** Thank you!"

}
