#!/bin/bash
###########################################################
# common - Utility file with common functions for updater #
#                                                         #
#                      Dependencies:                      #
#                           tar                           #
#                                                         #
#                                                         #
#                 Author: Ethan Smith-Coss                #
#                      Version: 0.1.1                     #
#              Created: 2021-05-20T16:47+0100             #
#           Last Modified: 2021-05-22T23:23+0100          #
###########################################################

function log {
	local log_out=$(realpath "${0%/*}/../.log.1")
	[[ $# -eq 0 ]] && log "ERROR" "Log function was called without any arguments. Returning 1." "$log_out" && return 1
	[[ ! $# -eq 3 ]] && log "ERROR" "Log function expected at least 3 arguments, recieved $#. Returning 1." "$log_out" && return 1
	$(echo "$(date -Iseconds) ($1): $2" >> "$3") >/dev/null 2>&1
	[[ ! $? -eq 0 ]] && log "ERROR" "Log function encountered an issue writing to \"$3\". Returning 1." "$log_out" && return 1

	return 0
}

function archive_system {
	local log_out=$(realpath "${0%/*}/../.log.1")
	[[ -e $1 ]] && log "ERROR" "Archive function was called without any arguments." "$log_out"
	
	local archive_output="$/tmp/microsoft-edge-autoupdater/$(echo $1 | sed 's/\//_/').tar.gz"
	[[ -f "$archive_output" ]] && return 0
	
	exit_code=$(grep 'usr/.*' "/tmp/microsoft-edge-autoupdater/Contents-amd64" | tar --overwrite -cvzf "$archive_output" "/opt/$1/" >>"$log_out" 2>&1 )
	[[ ! $exit_code -eq 0 ]] && { log "ERROR" "(Archive) There was an issue creating the archive file of system. Returning...(10)" "$log_out" ; return 10 ; }

	return 0
}

function restore_files {
	local log_out=$(realpath "${0%/*}/../.log.1")
	[[ -e $1 ]] && log "ERROR" "Restore function was called without any arguments." "$log_out"
	local backup_file="/tmp/microsoft-edge-autoupdater/$(echo $1 | 's/\/_/').tar.gz"
	[[ -f "$backup_file" ]] && { log "ERROR" "There is no backup of Microsoft Edge (Beta) identified. Restoration not possible." "$log_out" ; return 12 ; }
	exit_code=$( tar -xvzf "$backup_file" "/" >>"$log_out" 2>&1)
	[[ ! $exit_code -eq 0 ]] && { log "ERROR" "There was an issue restoring pervious files to system." \
		"The backup created will not be removed to allow for manual restoration. Returning...(12)" ; return 12 ; }

	return 0
}

function notify {
	## :@TODO: implement notification system.
	return 0
}
