if [[ ! -z ${MAILCOW_BACKUP_LOCATION} ]]; then
  BACKUP_LOCATION="${MAILCOW_BACKUP_LOCATION}"
fi

if [[ -z ${BACKUP_LOCATION} ]]; then
  while [[ -z ${BACKUP_LOCATION} ]]; do
    read -ep "Backup location (absolute path, starting with /): " BACKUP_LOCATION
  done
fi

if [[ ! ${1} =~ (backup|restore) ]]; then
  echo "First parameter needs to be 'backup' or 'restore'"
  exit 1
fi

if [[ ${1} == "backup" && ! ${2} =~ (aitrainer|all|--delete-days) ]]; then
  echo "Second parameter needs to be 'aitrainer', 'all' or '--delete-days'"
  exit 1
fi

BACKUP_LOCATION=$(echo ${BACKUP_LOCATION} | sed 's#/$##')
SCRIPT_DIR=/home/bosi/backoffice/aitrainer_backoffice
COMPOSE_FILE=${SCRIPT_DIR}/docker-compose.yml
ENV_FILE=${SCRIPT_DIR}/.env
if [ ! -f ${COMPOSE_FILE} ]; then
  echo "Compose file not found"
  exit 1
fi

echo "Using ${BACKUP_LOCATION} as backup/restore location."
echo

function backup() {
  DATE=$(date +"%Y-%m-%d-%H-%M-%S")
  CMPS_PRJ=aitrainer_backoffice
  mkdir -p "${BACKUP_LOCATION}/aitrainer-${DATE}"
  chmod 755 "${BACKUP_LOCATION}/aitrainer-${DATE}"
  #cp "${SCRIPT_DIR}/../mailcow.conf" "${BACKUP_LOCATION}/mailcow-${DATE}"
  while (( "$#" )); do
    case "$1" in
    gitlab|all)
      docker exec -t <container name> gitlab-backup create
    aitrainer_db|all)
      SQLIMAGE=$(grep -iEo '(mysql|mariadb)\:.+' ${COMPOSE_FILE})
      if [[ -z "${SQLIMAGE}" ]]; then
        echo "Could not determine SQL image version, skipping backup..."
        shift
        continue
      else
        echo "Using SQL image ${SQLIMAGE}, starting..."
        docker exec aitrainer-backup sh -c 'exec mysqldump --all-databases -uroot -p${MYSQL_ROOT_PASSWORD}' > ${BACKUP_LOCATION}/all-databases.sql
        
        docker run --name aitrainer-backup --rm \
            #-v $(docker volume ls -qf name=^aitrainer_backoffice_mysql-vol-1$):/var/lib/mysql/:ro,z \
            #-t --entrypoint= \
            #--sysctl net.ipv6.conf.all.disable_ipv6=1 \
            -v ${BACKUP_LOCATION}/aitrainer-${DATE}:/backup:z \
            ${SQLIMAGE} /bin/sh -c "mysqldump --host mysql-server --user root --password ${MYSQL_ROOT_PASSWORD} --backup --rsync --target-dir=/backup_mysql ; \
            mysqldump --prepare --target-dir=/backup_mysql ; \
            chown -R 999:999 /backup_mysql ; \
            /bin/tar --warning='no-file-ignored' --use-compress-program='gzip --rsyncable' -Pcvpf /backup/backup_mysql.tar.gz /backup_mysql ;"
        ;;&
      fi  
    --delete-days)
      shift
      if [[ "${1}" =~ ^[0-9]+$ ]]; then
        find ${BACKUP_LOCATION}/aitrainer-* -maxdepth 0 -mmin +$((${1}*60*24)) -exec rm -rvf {} \;
      else
        echo "Parameter of --delete-days is not a number."
      fi
      ;;
    esac
    shift
  done
}                         

if [[ ${1} == "backup" ]]; then
  backup ${@,,}
fi