#!/bin/bash -l

if [[ -e /var/.cloud66_env ]];then
  source /var/.cloud66_env
fi

#
# Simple application init script made for one my customer
# -------------------------------------------------------
# workflow:
#   - if dont have localy cached database, download it
#   - create new database
#   - restore database from dump (load data)
#   - grant privileges (in this case use same password as admins, it was in task)
#   - copy files from template file
#

# define variables optionaly could be in env
START=$(date +%s)
DATA_PATH="/tmp"
LOG_FILE="log/init-db.log"


# just to be sure is undefined set default values
login="_null"
password="_null"
db="_null"


# silly args parse :-)
for arg in "$@"; do
    case $arg in
        --login=*)
      login=$(echo $arg | sed 's/--login=//g')
        ;;
        --password=*)
      password=$(echo $arg | sed 's/--password=//g')
        ;;
        --db=*)
      db=$(echo $arg | sed 's/--db=//g')
        ;;
        --db_dump_url=*)
      DBURL=$(echo $arg | sed 's/--db_dump_url=//g')
      cachefile="/tmp/$(echo $DBURL | cut -d \/ -f 3)"
        ;;
        *)
            echo "Unknown option $arg"
        ;;
  esac
done

# CLI help for users
function print_help() {
  echo ""
  echo " App initial script"
  echo " ------------------"
  echo " This script require:"
  echo "  --login         username for connect to database"
  echo "  --password      password for connect to database"
  echo "  --db            name of database you want to create"
  echo "  --db_dump_url   url for database dump"
  echo ""
  echo " Example:"
  echo "  $0 --login=root --password='SecureDBpassword' --db=mynewdb"
  echo ""
  exit 1
}


#
# main flow
#

if [[ -z "$MYSQL_ADMIN_USER" ]];then
  MYSQL_ADMIN_USER=$login;
fi

if [[ -z "$MYSQL_ADMIN_PASSWORD" ]];then
  MYSQL_ADMIN_PASSWORD=$password;
fi

MYSQL="mysql -u '$MYSQL_ADMIN_USER' -p$MYSQL_ADMIN_PASSWORD"
MYSQLSHOW="mysqlshow -u '$MYSQL_ADMIN_USER' -p$MYSQL_ADMIN_PASSWORD"

# test if arguments are defined
for arg in $db $db_dump_url; do
  if [[ ${arg} = '_null' ]]; then
    echo "Error: Undefined argument..." >> ${LOG_FILE}
    print_help
    exit 1
  fi
done

escaped_db=$(echo $arg | sed 's/_/\\_/g')
# if database does not exists run sequence
$MYSQLSHOW $escaped_db &> /dev/null

if (( $? == 0 )); then
  echo "Database $db already exists, drop database..." >> ${LOG_FILE}
  $MYSQL -e "DROP DATABASE \`${db}\`;" || exit 1
fi

echo "Create database ${db} char set utf8;" >> ${LOG_FILE}
$MYSQL -e "CREATE DATABASE \`${db}\` CHAR SET utf8;" || exit 1

# if cachefile does not exists download dump first
[ -e $cachefile ] || wget -q -O- $DBURL --no-check-certificate > $cachefile || exit 1

if [[ "$MYSQL_ADMIN_USER" != "$login" ]];then
  echo "GRANT ALL ON \`${db}\`.* TO \`${login}\`@'%' IDENTIFIED BY '${password}';"
  $MYSQL -e "GRANT ALL ON \`${db}\`.* TO \`${login}\`@'%' IDENTIFIED BY '${password}';"
fi

zcat $cachefile | $MYSQL ${db} || exit 1

echo "Database created after $(( $(date +%s) - $START ))s" >> ${LOG_FILE}
