#!/bin/bash
do {
	#////////////////////////////////////
	# DietPi RAMDISK Script
	#
	#////////////////////////////////////
	# Created by Daniel Knight / daniel.knight@dietpi.com / dietpi.com
	#
	#////////////////////////////////////
	#
	# Info:
	# - Copies dietpi files from /boot to /DietPi (ram)
	# - /DietPi is mounted as tmpfs (ram)
	# - This allows us to vastly reduce filesystem IO across DietPi.
	# - Creates a file when active (/DietPi/.ramdisk)
	#
	# Usage:
	# - Called from /DietPi/dietpi/conf/dietpi-service
	# - /DietPi/dietpi/dietpi-ramdisk 0				= Copy from /boot (disk) to /DietPi (ram)
	# - /DietPi/dietpi/dietpi-ramdisk 1				= Copy from /DietPi (ram) to /boot (disk)
	#////////////////////////////////////

	#Force en_GB Locale for whole script. Prevents incorrect parsing with non-english locales.
	setvar LANG = 'en_GB.UTF-8'

	#Ensure we are in users home dir: https://github.com/Fourdee/DietPi/issues/905#issuecomment-298223705
	cd $HOME

	setvar INPUT = '0'

	if [[ $1 =~ ^-?[0-9]+$ ]] {

		setvar INPUT = "$1"

	}

	#Import DietPi-Globals ---------------------------------------------------------------
	#. /DietPi/dietpi/func/dietpi-globals # Not compatible until dietpi-boot.service
	#Import DietPi-Globals ---------------------------------------------------------------

	setvar FILEPATH_RAM = ""/DietPi""
	setvar FILEPATH_DISK = ""/boot""

	#List of ini/config files located in /boot
	setvar aFILE_BOOT_INI = ''(
		'dietpi.txt'
		'config.txt'
		'boot.ini'
		'uEnv.txt'
	)

	#/////////////////////////////////////////////////////////////////////////////////////
	#Main Loop
	#/////////////////////////////////////////////////////////////////////////////////////

	#Start: Copy to Ram
	if (( $INPUT == 0 )) {

		if test ! -f /DietPi/.ramdisk {

			echo -e "$(date) | DietPi-Ramdisk: Starting"

			#Generate required directories
			mkdir -p "$FILEPATH_RAM"/dietpi
			mkdir -p "$FILEPATH_RAM"/dietpi/conf
			mkdir -p "$FILEPATH_RAM"/dietpi/func
			mkdir -p "$FILEPATH_RAM"/dietpi/misc

			#Copy array of /boot/* files to RAM (config/ini etc)
			for ((i=0; i<${#aFILE_BOOT_INI[@]}; i++))
			do

				if [ -f "$FILEPATH_DISK/${aFILE_BOOT_INI[$i]}" ]; then

					cp "$FILEPATH_DISK"/${aFILE_BOOT_INI[$i]} "$FILEPATH_RAM"/

					# - Convert line endings to Unix from Dos. Prevents various issues where users modify file on another system, then save with dos line endings: https://github.com/Fourdee/DietPi/issues/390
					sed -i $'s/\r$//' "$FILEPATH_RAM"/${aFILE_BOOT_INI[$i]}

				fi

			done

			#/boot/dietpi folder
			cp -Rf "$FILEPATH_DISK"/dietpi "$FILEPATH_RAM"/

			#Set execute
			chmod -R +x $FILEPATH_RAM

			#Generate active flag
			echo -e "0" > /DietPi/.ramdisk

			echo -e "$(date) | DietPi-Ramdisk: Completed"

		} else {

			echo -e "$(date) | DietPi-Ramdisk: Already running"

		}

	#Stop: Copy everything back to DISK
	} elif (( $INPUT == 1 )) {

		echo -e "$(date) | DietPi-Ramdisk: Stopping"

		if test -f /DietPi/.ramdisk {

			if test ! -f /DietPi/dietpi/boot { #Only copy back if file exists (in-case "DietPi-Ramdisk: Already running" occured during start): https://github.com/Fourdee/DietPi/issues/719#issuecomment-276101472

				echo -e "$(date) | DietPi-Ramdisk: Error - /DietPi/dietpi/boot is missing, aborting..."

			} else {

				#Remove all of DietPi files and folders from DISK
				# rm -R "$FILEPATH_DISK"/dietpi #: https://github.com/Fourdee/DietPi/issues/905#issuecomment-298241622

				#Copy DietPi to Disk with files from RAM
				cp -Rf "$FILEPATH_RAM"/* /boot/

				#remove active flag.
				rm /DietPi/.ramdisk &> /dev/null

			}

			echo -e "$(date) | DietPi-Ramdisk: Completed"

		} else {

			echo -e "$(date) | DietPi-Ramdisk: Is not currently running"

		}
	}

	#Sync changes to disk NOW
	sync

	#-----------------------------------------------------------------------------------
	#delete[]
	unset aFILE_BOOT_INI
	#-----------------------------------------------------------------------------------
	exit
	#-----------------------------------------------------------------------------------
}