#!/bin/bash

# Interactive backup script written by Skylar Grant
#
# GitHub: https://github.com/voidf1sh/backup-script
# File: backup.sh
# Version: 0.0.1
# Date: 2021.09.21
####################################################

####################################################
# Formatting Tips:
# (Tips found at : https://misc.flogisoft.com/bash/tip_colors_and_formatting)
# 
# Formatting:
# \e[1m - Bold
# \e[2m - Dim
# \e[8m - Hidden (passwords)
#
# Reset:
# \e[0m - Reset All Attributes
# \e[21m - Reset Bold/Bright
# \e[22m - Reset Dim
# \e[28m - Reset Hidden
#
# Colors:
# \e[39m - Default Foreground Color
# \e[30m - Black
# \e[31m - Red
# \e[32m - Green
# \e[34m - Blue
####################################################

# Some initial variables to work with
#   Note: this isn't ideal, this is going to name the
#	backup according to the time the script is launched
#	not according to the time the actual backup was initiated
backupdir="$(pwd)/backups"
timestamp=$(date "+%Y%m%d_%H%M")
filename="backup_$timestamp.tar.gz"

# Initial Prompt
# Bash allows for linebreaks in string literals and will
#   break lines accordingly in the shell
echo -e "
  \e[1m\e[32m[ Skylar's Backup Script ]\e[0m
  
  \e[32mThis script is being run from: \e[0m'$(pwd)'
  \e[32mBackup Filename: \e[0m'$filename'
  \e[32mCurrent Backup Location: \e[0m'$backupdir'
  \e[32mDirectories to Backup: \e[0m'/var/www', '$HOME'

  \e[34mPlease enter an option from below:\e[0m

  \e[34m[1] \e[0mCreate a new backup.
  \e[34m[2] \e[0mList saved backups.
  \e[34m[3] \e[0mCheck /tmp for any rogue backups.
  \e[34m[4] \e[0mChange backup directory.
  \e[34m[5] \e[0mGenerate a reusable backup script using these settings.
  
  \e[34m[0] \e[31mExit\e[0m
"

if ! test -d "$backupdir"; then
	echo -e "\e[31mError: The backup directory does not exist.
\e[0mWould you like to create it? [y/n]"
	read -p "[y/n]: " yesno

	case "$yesno" in
		"y")
			mkdir -p "$backupdir"
			;;
		"n")
			;;
	esac
fi

# Wait for input
read -p "  Option: " opt

# Execute the correct commands based on input.
case "$opt" in
	1)
		# Create new backup
		clear
		tar -czf "/tmp/$filename" /var/www $HOME
		mv "$filename" "$backupdir"
		;;
	2)
		# List saved backups
		clear
		ls -al "$backupdir" | grep "backup"
		;;
	3)
		# Check /tmp for any rogue backups.
		clear
		ls -al /tmp | grep backup
		;;
	4)
		# Change backup directory
		read -p "  New directory: " newdir
		backupdir=$newdir
		;;
	0)
		# Exit the script
		echo "!! Quitting !!"
		sleep 0.4s
		clear
		exit
		;;
	*)
		clear
		echo "!! Invalid Option !!"
		;;
esac

exec ./backup.sh
