#!/bin/bash

# The script should immediately exit if any command in the script fails.
set -e

# This script deploys the Dashboard App and their Cloud Functions to Firebase.
# Before deploying, the script installs all dependencies and builds the dashboard app in production.

# Go to the project root directory
cd $(dirname ${0})/../..

if [ -z ${MATERIAL2_BOARD_FIREBASE_DEPLOY_KEY} ]; then
  echo "Error: No access token for firebase specified." \
       "Please set the environment variable 'MATERIAL2_DASHBOARD_ACCESS_TOKEN'."
  exit 1
fi

# Paths to the dashboard and functions directories.
dashboardFolder=tools/dashboard

# Path to the firebase binary of the root package.json
firebaseBin=$(npm bin)/firebase

# Go to the dashboard folder because otherwise the Firebase CLI tries to deploy the wrong project.
cd ${dashboardFolder}

# Install node_modules for the dashboard and afterwards build the dashboard app in production.
(npm install; $(npm bin)/ng build --aot -prod) &

# Install node modules for dashboard functions. Firebase CLI needs to execute the functions
# to collect all function names before it can deploy them.
(cd functions; npm install) &

# The dashboard and function dependencies are installed concurrently. Also the dashboard app is
# build in production afterwards. Wait for all async tasks to finish before proceeding.
wait

# Deploy the dashboard to Firebase. Based on the current configuration hosting and functions
# will be deployed.
${firebaseBin} deploy --token ${MATERIAL2_BOARD_FIREBASE_DEPLOY_KEY} \
  --non-interactive --project material2-board
