#!/usr/bin/env bash

BUILD_DIR=${1:-}
CACHE_DIR=${2:-}
ENV_DIR=${3:-}
BP_DIR=$(cd $(dirname ${0:-}); cd ..; pwd)

TSC=$BUILD_DIR/node_modules/.bin/tsc

LOG_FILE=$(mktemp -t tsc-build-log.XXXXX)
echo "" > "$LOG_FILE"

set -o pipefail

source $BP_DIR/lib/output.sh
source $BP_DIR/lib/env.sh
source $BP_DIR/lib/tsc.sh

### Setting development environment

header "Creating build environment"
export_env_dir "$ENV_DIR"
deprecate_tsc_custom_file | output $LOG_FILE
create_build_env # don't pipe into output because the sub-shell would prevent exports

[ -f "$BUILD_DIR/yarn.lock" ] && YARN=true || YARN=false

build_dependencies() {
    if $YARN; then
        yarn_node_modules "$BUILD_DIR"
    else
        npm_node_modules "$BUILD_DIR"
    fi

    if $NODE_VERBOSE; then
        list_dependencies "$BUILD_DIR"
    fi
}

if [ "$YARN_PRODUCTION" = "false" ] || [ "$NPM_CONFIG_PRODUCTION" = "false" ] || [ "$NODE_ENV" != "production" ] || [ "$NODE_ENV" == "test" ]; then
    header "Development dependencies already installed"
else
    header "Installing development dependencies"
    build_dependencies | output $LOG_FILE
fi

header "Building application with tsc $($TSC --version | sed 's/Version //')"
compile_ts "$BUILD_DIR" | output $LOG_FILE
exit_build_env
if [ $? == "0" ]; then
    header "Build succeeded!"
else
    header "Build failed"
fi
