#!/bin/bash
# 
# usage:
#  create_module.sh MOs AOs Electrons
# Prepares all the files for the creation of a new module.
# The first argument is the name of the module
# All remaining aruments are dependencies.
# Thu Apr  3 01:44:58 CEST 2014

DEBUG=1

# If DEBUG=1, the print debug info.
function debug()
{
  if [[ $DEBUG -eq 1 ]]
  then
    function debug()
    {
      echo "$@"
    }
  else
    function debug()
    {
      :
    }
  fi
  debug $@
}

function fail()
{
  echo "Error:  $@"
  cd "${QPACKAGE_ROOT}/src"
  rm -rf -- "${MODULE}"
  exit 1
}


if [[ -z $QPACKAGE_ROOT ]]
then
  echo "Error:"
  echo "QPACKAGE_ROOT environment variable is not set."
  echo "source quantum_package.rc"
  exit 1
fi

MODULE=$1

# Check command line
if [[ -z $MODULE ]]
then
  echo "usage: $(basename $0) <NewModuleName>"
  exit 1
fi

shift



# Check if module already exists
if [ -d ${MODULE} ]
then
  echo "Error: Module $MODULE already exists"
  exit 1
fi

debug "Module does not already exist: OK"


# Set up dependencies
ALL_MODULES="$(cat NEEDED_MODULES)"
echo "Select which modules you are sure you will need:  (press q to quit)"  
NEEDED_MODULES=""
select M in ${ALL_MODULES}
do
  if [[ -z $M ]]
  then
    break
  fi
  NEEDED_MODULES+=" $M"
  echo "$NEEDED_MODULES"
done



# Create module directory and go into it
mkdir "${QPACKAGE_ROOT}/src/${MODULE}"
if [[ $? != 0 ]]
then
  echo  "Error: Unable to create module directory."
  exit 1
fi

if [[ ! -d  "${QPACKAGE_ROOT}/src/${MODULE}" ]]
then
  echo  "Something strange happened: the"
  echo  "${QPACKAGE_ROOT}/src/${MODULE}"
  echo  "directory was not created."
  exit 1
fi

cd "${QPACKAGE_ROOT}/src/${MODULE}"
if [[ "${PWD}" != "${QPACKAGE_ROOT}/src/${MODULE}" ]]
then
  echo  "Something strange happened: we should be in"
  echo  "${QPACKAGE_ROOT}/src/${MODULE}"
  echo  "but we are in"
  echo  "${PWD}"
  exit 1
fi

debug "Module directory is created."



# Create the Makefile
"${QPACKAGE_ROOT}/scripts/create_Makefile.sh" || fail "Unable to create Makefile"
if [[ ! -f Makefile ]]
then
  fail "Makefile was not created"
fi
debug "Makefile created"

# Create the NEEDED_MODULES file
"${QPACKAGE_ROOT}/scripts/create_Needed_modules.sh" ${NEEDED_MODULES} || fail "Unable to create the NEEDED_MODULES file"
if [[ ! -f NEEDED_MODULES ]]
then
  fail "NEEDED_MODULES was not created"
fi

debug "NEEDED_MODULES created"


# Create rst templates
"${QPACKAGE_ROOT}/scripts/create_rst_templates.sh" || fail "Unable to create rst templates"


# Update module list in main NEEDED_MODULES
ALL_MODULES+=" ${MODULE}"
echo "${ALL_MODULES}" > "${QPACKAGE_ROOT}/src/NEEDED_MODULES"
debug "Updated NEEDED_MODULES"


# Create tests directory
mkdir tests
if [[ ! -d tests ]]
then
  fail "tests directory was not created"
fi

cd tests || fail "Unable to enter into tests directory"
"${QPACKAGE_ROOT}/scripts/create_tests_Makefile.sh"
cd ..
if [[ ! -f tests/Makefile ]]
then
  fail "tests/Makefile was not created"
fi


