#!/bin/bash
{
	#////////////////////////////////////
	# DietPi Function: Dphys-Swapfile
	#
	#////////////////////////////////////
	# Created by Daniel Knight / daniel.knight@dietpi.com / dietpi.com
	#
	#////////////////////////////////////
	#
	# Info:
	# - DietPi Dphys-Swapfile control for setting enable/disable/size/location.
	#
	# Usage:
	# - $1 = enable+size/disable
	# - $2 = optional location
	# - /DietPi/dietpi/func/dietpi-set_dphys-swapfile     = Print current config size and location
	# - /DietPi/dietpi/func/dietpi-set_dphys-swapfile <=0 = Disable + Delete swapfile.
	# - /DietPi/dietpi/func/dietpi-set_dphys-swapfile 1   = Enable + Auto Size
	# - /DietPi/dietpi/func/dietpi-set_dphys-swapfile >=2 = Enable + Manual Size
	# - /DietPi/dietpi/func/dietpi-set_dphys-swapfile >=2 /var/swap = Enable + Set Size + Set new Location (also deletes previous swapfile)
	#////////////////////////////////////

	#Import DietPi-Globals ---------------------------------------------------------------
	. /DietPi/dietpi/func/dietpi-globals
	G_CHECK_ROOT_USER
	export G_PROGRAM_NAME='DietPi-dphys-swapfile'
	#Import DietPi-Globals ---------------------------------------------------------------

	SWAP_SIZE_CURRENT=0
	SWAP_LOCATION_CURRENT='/var/swap'
	if [ -f /etc/dphys-swapfile ]; then

		SWAP_SIZE_CURRENT=$(cat /etc/dphys-swapfile | grep -m1 '^CONF_SWAPSIZE=' | sed 's/.*=//')
		SWAP_LOCATION_CURRENT=$(cat /etc/dphys-swapfile | grep -m1 '^CONF_SWAPFILE=' | sed 's/.*=//')

	fi

	SWAP_SIZE_TARGET=$SWAP_SIZE_CURRENT
	if [[ $1 =~ ^-?[0-9]+$ ]]; then
		SWAP_SIZE_TARGET=$1
	fi

	SWAP_LOCATION_TARGET=$SWAP_LOCATION_CURRENT
	if [ "$2" != "" ]; then
		SWAP_LOCATION_TARGET=$2
	fi

	SERVICE_MODE=""

	Generate_Default_Conf(){

	cat << _EOF_ > /etc/dphys-swapfile
CONF_SWAPSIZE=0
CONF_SWAPFILE=/var/swap
_EOF_

	}

	Delete_Swapfile(){

		G_DIETPI-NOTIFY 2 "Deleting existing swapfile ($SWAP_LOCATION_CURRENT)\n"
		rm "$SWAP_LOCATION_CURRENT" &> /dev/null

	}

	Update_Conf(){

		sed -i "/CONF_SWAPSIZE/c\CONF_SWAPSIZE=$SWAP_SIZE_TARGET" /etc/dphys-swapfile
		sed -i "/CONF_SWAPFILE/c\CONF_SWAPFILE=$SWAP_LOCATION_TARGET" /etc/dphys-swapfile

		#	DietPi.txt
		sed -i "/^AUTO_SETUP_SWAPFILE_SIZE=/c\AUTO_SETUP_SWAPFILE_SIZE=$SWAP_SIZE_TARGET" /DietPi/dietpi.txt

	}

	Swap_Disable(){

		G_DIETPI-NOTIFY 3 DietPi Disable swapfile

		SWAP_SIZE_TARGET=0
		SERVICE_MODE="disable"

		Generate_Default_Conf
		dphys-swapfile swapoff
		Delete_Swapfile

		Update_Conf

	}

	Swap_Enable(){

		G_DIETPI-NOTIFY 3 DietPi Generating new swapfile
		G_DIETPI-NOTIFY 2 "Size     = $SWAP_SIZE_TARGET MB"
		G_DIETPI-NOTIFY 2 "Location = $SWAP_LOCATION_TARGET"

		SERVICE_MODE="enable"
		Generate_Default_Conf
		dphys-swapfile swapoff
		Delete_Swapfile

		Update_Conf
		dphys-swapfile setup
		chmod 600 "$SWAP_LOCATION_TARGET" #stretch complains when permissions are not 600, so lets set it.
		dphys-swapfile swapon

	}

	#/////////////////////////////////////////////////////////////////////////////////////
	# Main Loop
	#/////////////////////////////////////////////////////////////////////////////////////
	#Info mode - Print Size / Location
	if [ -z "$1" ]; then

		echo -e "$SWAP_SIZE_CURRENT $SWAP_LOCATION_CURRENT"

	#Disabled
	elif (( $SWAP_SIZE_TARGET == 0 )); then

		Swap_Disable

	#Enabled (Auto)
	elif (( $SWAP_SIZE_TARGET == 1 )); then

		SWAP_SIZE_TARGET=$(( 2048 - $(free -m | grep -m1 'Mem:' | awk '{print $2}') ))
		if (( $SWAP_SIZE_TARGET < 0 )); then

			Swap_Disable

		else

			Swap_Enable

		fi

	#Enabled (manual)
	elif (( $SWAP_SIZE_TARGET >= 2 )); then

		Swap_Enable

	fi

	#-----------------------------------------------------------------------------------
	#Service Control.
	if [ "$SERVICE_MODE" != "" ]; then

		systemctl "$SERVICE_MODE" dphys-swapfile

		G_DIETPI-NOTIFY 2 "Completed\n"

	fi
	#-----------------------------------------------------------------------------------
	exit
	#-----------------------------------------------------------------------------------
}