#!/usr/bin/env bash

SCRIPT_PATH=$( cd "$(dirname "$0")" ; pwd -P )

IMAGE_NAME="mariadb"
IMAGE_VERSION="10.3"

SERVICE_NAME=maria-db


source ${SCRIPT_PATH}/../common.shinc

#
# Project specific variables
#

DB_VOLUME=mariadb_shared
BACKUP_DIR=${SCRIPT_PATH}/backup

source ${SCRIPT_PATH}/env.shinc 2> /dev/null


init() {
	__init

	# Create networks
	NETWORKS=(${DB_NETWORK})
	__createNetworks

	# Create the database container
	docker create \
		--name ${SERVICE_NAME} \
		--restart=unless-stopped \
		-v ${DB_VOLUME}:/var/lib/mysql \
		-p 127.0.0.1::3306 \
		-e MYSQL_ROOT_PASSWORD=${DB_PASSWORD} \
		--net ${DB_NETWORK} \
		${IMAGE_NAME}:${IMAGE_VERSION}

	[[ $? -ne 0 ]] && return 1

	__ask_to_start
}

# Runs a command inside the container, mounting the current context to /current inside
cmd() {
	docker run --rm -it -v $PWD:/current --net ${DB_NETWORK} ${IMAGE_NAME}:${IMAGE_VERSION} $@
}


import() {
  local dbname="$1"
  shift
  local filename="$1"
  shift

  if [[ "${dbname}" == "" ]] || [[ "${filename}" == "" ]]; then
    __err "You must provide database name and filename of the file you want to import"
    __msg "E.g. ./run import my-database-name \"\$PWD/my-file.sql\""
    return 137
  fi

  if [[ ! -f "${filename}" ]]; then
    __err "The filename was not located at ${filename}"
    return 137
  fi

  echo -e "${C_WARN}This will import the file located at \"${C_WHITE}${filename}${C_WARN}\" to a database named \"${C_WHITE}${dbname}${C_WARN}\"${C_NONE}"

  echo

  __warn "Do you want to continue? [y/(n)] "

  read CONTINUE

  if [[ "${CONTINUE}" != "y" ]]; then
    __msg "Quiting..."
    return 0
  fi

  __msg "Importing, please wait..."

  local path=$(realpath "${filename}")
  local name=$(basename "${path}")

  docker run --rm -it -v "${path}":"/import/${name}" --net ${DB_NETWORK} ${IMAGE_NAME}:${IMAGE_VERSION} mysql -h ${SERVICE_NAME} -u root -p${DB_PASSWORD} "${dbname}" -e "source /import/${name}"

}

bash() {
        cmd bash
}

# Used for exporting the whole database filesystem
backup() {
	stop
	local user=$(id -u)

	mkdir -p ${BACKUP_DIR} && \
	docker run --rm --volumes-from ${SERVICE_NAME} -v ${BACKUP_DIR}:/backup busybox tar cvf /backup/backup.tar /var/lib/mysql && sudo chown -R ${user}:${user} ./backup
	if [[ $? -ne 0 ]]; then
		__err "Could not create the backup"
		exit 2
	fi

	start

	return $?
}

# Used for importing the whole database filesystem
restore() {
	stop
	docker run --rm --volumes-from ${SERVICE_NAME} -v ${BACKUP_DIR}:/backup busybox sh -c "rm -rf /var/lib/mysql/* && tar xvf /backup/backup.tar --directory /"
	start

	return $?
}

"$@"

exit $?
