#!/bin/bash
do {
	#////////////////////////////////////
	# 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 ---------------------------------------------------------------
	source /DietPi/dietpi/func/dietpi-globals
	G_CHECK_ROOT_USER
	export G_PROGRAM_NAME='DietPi-dphys-swapfile'
	#Import DietPi-Globals ---------------------------------------------------------------

	setvar SWAP_SIZE_CURRENT = '0'
	setvar SWAP_LOCATION_CURRENT = ''/var/swap''
	if test -f /etc/dphys-swapfile {

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

	}

	setvar SWAP_SIZE_TARGET = "$SWAP_SIZE_CURRENT"
	if [[ $1 =~ ^-?[0-9]+$ ]] {
		setvar SWAP_SIZE_TARGET = "$1"
	}

	setvar SWAP_LOCATION_TARGET = "$SWAP_LOCATION_CURRENT"
	if test $2 != "" {
		setvar SWAP_LOCATION_TARGET = "$2"
	}

	setvar SERVICE_MODE = """"

	proc Generate_Default_Conf {

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

	}

	proc Delete_Swapfile {

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

	}

	proc 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

	}

	proc Swap_Disable {

		G_DIETPI-NOTIFY 3 DietPi Disable swapfile

		setvar SWAP_SIZE_TARGET = '0'
		setvar SERVICE_MODE = ""disable""

		Generate_Default_Conf
		dphys-swapfile swapoff
		Delete_Swapfile

		Update_Conf

	}

	proc 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"

		setvar 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 test -z $1 {

		echo -e "$SWAP_SIZE_CURRENT $SWAP_LOCATION_CURRENT"

	#Disabled
	} elif (( $SWAP_SIZE_TARGET == 0 )) {

		Swap_Disable

	#Enabled (Auto)
	} elif (( $SWAP_SIZE_TARGET == 1 )) {

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

			Swap_Disable

		} else {

			Swap_Enable

		}

	#Enabled (manual)
	} elif (( $SWAP_SIZE_TARGET >= 2 )) {

		Swap_Enable

	}

	#-----------------------------------------------------------------------------------
	#Service Control.
	if test $SERVICE_MODE != "" {

		systemctl $SERVICE_MODE dphys-swapfile

		G_DIETPI-NOTIFY 2 "Completed\n"

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