#!/bin/bash
githubAccount=$1

exec 5>&1
# REM create core folder
mkdir -p core
cd core
ERRORS=""
FAILEDMODULES=""
get_modules() {
  for module in "$@"
  do
    git clone https://github.com/$githubAccount/$module.git
    pushd $module
    git remote add upstream https://github.com/mifosio/$module.git
    # For some reason permission is denied
    chmod +x gradlew
    THISBUILD="\nBUILDING $module\n"
    THISBUILD+=$(./gradlew publishToMavenLocal |& tee >(cat - >&5) 
    	if [ ${PIPESTATUS[0]} -ne 0 ]; then exit 1; fi )
    if [ $? -ne 0 ]; then 
        ERRORS+="$(echo -e $THISBUILD | tail)\n"
	FAILEDMODULES+="$module "
    fi
    popd
  done
}

get_modules lang async cassandra mariadb data-jpa 'command' api 'test'

# Return to start folder
cd ..

# REM create tools folder
mkdir tools
cd tools

# REM initialize javamoney
git clone https://github.com/JavaMoney/javamoney-lib.git
cd javamoney-lib
THISBUILD="\nBUILDING javamoney-lib\n"
THISBUILD+=$(mvn install -Dmaven.test.skip=true  |& tee >(cat - >&5) 
   if [ ${PIPESTATUS[0]} -ne 0 ]; then exit 1; fi )
if [ $? -ne 0 ]; then 
   ERRORS+="$( echo -e $THISBUILD | tail)\n"
   FAILEDMODULES+="javamoney-lib "
fi

cd ..

# REM initialize crypto
git clone https://github.com/$githubAccount/crypto.git
cd crypto
git remote add upstream https://github.com/mifosio/crypto.git
chmod +x gradlew
THISBUILD="\nBUILDING crypto\n"
THISBUILD+=$(./gradlew publishToMavenLocal |& tee >(cat -  >&5) 
    if [ ${PIPESTATUS[0]} -ne 0 ]; then exit 1; fi )
if [ $? -ne 0 ]; then 
    ERRORS+="$(echo -e $THISBUILD | tail) \n"
    FAILEDMODULES+="crypto "
fi

cd ..

# exit tools directory
cd ..


get_modules anubis permitted-feign-client provisioner identity rhythm template office customer group accounting portfolio deposit-account-management teller reporting

# REM initialize payroll
git clone 'https://github.com/'$githubAccount'/payroll.git'
cd payroll
git remote add upstream https://github.com/mifosio/payroll.git
git checkout develop
chmod +x gradlew
./gradlew publishToMavenLocal

cd ..

mkdir integration-tests
cd integration-tests

get_modules service-starter default-setup demo-server test-provisioner-identity-organization

# test-accounting-portfolio is built a little different so it's done separate from the others
git clone https://github.com/$githubAccount/test-accounting-portfolio.git
cd test-accounting-portfolio
git remote add upstream https://github.com/mifosio/test-accounting-portfolio.git
chmod +x gradlew
THISBUILD="\nBUILDING test-accounting-portfolio\n"
THISBUILD+=$( ./gradlew build |& tee >(cat - >&5)
   if [ ${PIPESTATUS[0]} -ne 0 ]; then exit 1; fi )
if [ $? -ne 0 ]; then 
   ERRORS+="$(echo -e $THISBUILD | tail)\n"
   FAILEDMODULES+="test-accounting-portfolio "
fi
# exit integration-tests directory
cd ..

# REM initialize Web App
git clone https://github.com/$githubAccount/fims-web-app.git
(
cd fims-web-app
git remote add upstream https://github.com/mifosio/fims-web-app.git
npm i
)

if [ ! -z "$ERRORS" ] ; then
	echo "********************"
	echo "Build errors found:"
	echo "********************"
	echo -e "$ERRORS"
	echo "********************"
	echo "Build errors found"
	echo "********************"
	echo "The following modules failed to build: $FAILEDMODULES"
fi
