#!/usr/bin/env bash

# This script expects a .my.cnf file in order to provide secure, passwordless access.
# Alternatively, add credentials as constants if needed. 

MYSQL_COMMAND=$(which mysql)
MYSQLDUMP_COMMAND=$(which mysqldump)

function create_new_mysql_database {
  # Create a MySQL database from DDL of another database. Include routines and triggers.

  DESTINATION_DATABASE_NAME="dbunit_${SOURCE_DATABASE_NAME}"

  if [ -x ${MYSQL_COMMAND} ] && [ -x ${MYSQLDUMP_COMMAND} ]; then
    # Dump the schema from source database
    ${MYSQLDUMP_COMMAND} ${SOURCE_DATABASE_NAME} --no-data --routines --triggers > ${SOURCE_DATABASE_NAME}.sql

    # Create the new database
    echo "create database ${DESTINATION_DATABASE_NAME} character set UTF8 collate utf8_general_ci;" | ${MYSQL_COMMAND}

    # Load into newly created database from dump
    ${MYSQL_COMMAND} -f ${DESTINATION_DATABASE_NAME} < ${SOURCE_DATABASE_NAME}.sql;
  else
    printf '%s\n' "${MYSQL_COMMAND} or ${MYSQLDUMP_COMMAND} not found or executable" && exit 1
  fi
}

while getopts 'd:h' flag; do
  case "${flag}" in
  d) SOURCE_DATABASE_NAME="${OPTARG}" ;;
  h) printf '%s\n'
     printf '%s\n' "This script creates a new database using the schema from another database"
     printf '%s\n'
     printf '%s\n' "-d: Specify database name"
     printf '%s\n' "-h: Print this message"
     printf '%s\n' "Example: ./seed_mysql_database.sh -d MYDATABASE"
     exit 0;;
  *) printf "Unexpected option ${flag}\n"
     exit 1 ;;
  esac
done

[ -n "${SOURCE_DATABASE_NAME}" ] && create_new_mysql_database
