#!/bin/sh

os=$(cat "${__global:?}/explorer/os")

PHPVER=$(cat "${__object:?}/parameter/php-version")
export PHPVER

case "$os" in
	'alpine')
		# Alpine packages looks like php81-fpm - we make sure to remove dots from user
		# input.
		PHPVER=$(echo "$PHPVER" | tr -d '.')

		package="php${PHPVER}-fpm"
		opcache_package="php${PHPVER}-opcache"
		apcu_package="php${PHPVER}-pecl-apcu"

		service="php-fpm${PHPVER}"
		php_confdir="/etc/php${PHPVER}"
		php_ini="${php_confdir:?}/php.ini"

		PHP_INCLUDEDIR="/usr/share/php${PHPVER:?}"
		export PHP_INCLUDEDIR
	;;
	'debian'|'ubuntu')
		package="php${PHPVER}-fpm"
		opcache_package="php${PHPVER}-opcache"
		apcu_package="php${PHPVER}-apcu"

		service="php${PHPVER}-fpm"
		php_confdir="/etc/php/${PHPVER}"
		php_ini="${php_confdir:?}/fpm/php.ini"

		PHP_INCLUDEDIR="/usr/share/php/${PHPVER:?}"
		export PHP_INCLUDEDIR
	;;
	*)
		printf "Your operating system is currently not supported by this type\n" >&2
		printf "Please contribute an implementation for it if you can.\n" >&2
		exit 1
		;;
esac

__package "$package"
require="__package/$package" __start_on_boot "$service"

if [ -f "${__object:?}/parameter/enable-opcache" ]; then
	__package "$opcache_package"
fi

if [ -f "${__object:?}/parameter/enable-apcu" ]; then
	__package "$apcu_package"
fi

MEMORY_LIMIT=$(cat "${__object:?}/parameter/memory-limit")
export MEMORY_LIMIT

UPLOAD_MAX_FILESIZE=$(cat "${__object:?}/parameter/upload-max-filesize")
export UPLOAD_MAX_FILESIZE

mkdir -p "${__object:?}/files"
"${__type:?}/files/php.ini.sh" >"${__object:?}/files/php.ini"

require="__package/$package" __file "${php_ini:?}" \
	--mode 644 --source "${__object:?}/files/php.ini" \
	--onchange "service $service restart"

require="__file/${php_ini:?}" __service "$service" --action start
