#!/bin/bash

AIRFLOW_VERSION=2_2
DOCKER_COMPOSE_PROJECT_NAME=aws-mwaa-local-runner-$AIRFLOW_VERSION

display_help() {
   # Display Help
   echo "======================================"
   echo "   MWAA Local Runner CLI"
   echo "======================================"
   echo "Syntax: mwaa-local-runner [command]"
   echo
   echo "---commands---"
   echo "help                   Print CLI help"
   echo "build-image            Build Image Locally"
   echo "reset-db               Reset local PostgresDB container."
   echo "start                  Start Airflow local environment. (LocalExecutor, Using postgres DB)"
   echo "test-requirements      Install requirements on an ephemeral instance of the container."
   echo "package-requirements   Download requirements WHL files into plugins folder."
   echo "validate-prereqs       Validate pre-reqs installed (docker, docker-compose, python3, pip3)"
   echo
}

validate_prereqs() {
   docker -v >/dev/null 2>&1
   if [ $? -ne 0 ]; then
      echo -e "'docker' is not installed or not runnable without sudo. \xE2\x9D\x8C"
   else
      echo -e "Docker is Installed. \xE2\x9C\x94"
   fi

   docker-compose -v >/dev/null 2>&1
   if [ $? -ne 0 ]; then
      echo -e "'docker-compose' is not installed. \xE2\x9D\x8C"
   else
      echo -e "Docker compose is Installed. \xE2\x9C\x94"
   fi

   python3 --version >/dev/null 2>&1
   if [ $? -ne 0 ]; then
      echo -e "Python3 is not installed. \xE2\x9D\x8C"
   else
      echo -e "Python3 is Installed \xE2\x9C\x94"
   fi

   pip3 --version >/dev/null 2>&1
   if [ $? -ne 0 ]; then
      echo -e "Pip3 is not installed. \xE2\x9D\x8C"
   else
      echo -e "Pip3 is Installed. \xE2\x9C\x94"
   fi
}

build_image() {
   docker build --rm --compress -t amazon/mwaa-local:$AIRFLOW_VERSION ./docker
}

case "$1" in
validate-prereqs)
   validate_prereqs
   ;;
test-requirements)
   BUILT_IMAGE=$(docker images -q amazon/mwaa-local:$AIRFLOW_VERSION)
   if [[ -n "$BUILT_IMAGE" ]]; then
     echo "Container amazon/mwaa-local:$AIRFLOW_VERSION exists. Skipping build"
   else
     echo "Container amazon/mwaa-local:$AIRFLOW_VERSION not built. Building locally."
     build_image
   fi
   docker run -v $(pwd)/dags:/usr/local/airflow/dags -v $(pwd)/plugins:/usr/local/airflow/plugins -v $(pwd)/requirements:/usr/local/airflow/requirements -it amazon/mwaa-local:$AIRFLOW_VERSION test-requirements
   ;;
package-requirements)
   BUILT_IMAGE=$(docker images -q amazon/mwaa-local:$AIRFLOW_VERSION)
   if [[ -n "$BUILT_IMAGE" ]]; then
     echo "Container amazon/mwaa-local:$AIRFLOW_VERSION exists. Skipping build"
   else
     echo "Container amazon/mwaa-local:$AIRFLOW_VERSION not built. Building locally."
     build_image
   fi
   docker run -v $(pwd)/dags:/usr/local/airflow/dags -v $(pwd)/plugins:/usr/local/airflow/plugins -v $(pwd)/requirements:/usr/local/airflow/requirements -it amazon/mwaa-local:$AIRFLOW_VERSION package-requirements
   ;;   
build-image)
   build_image
   ;;
reset-db)
   docker-compose -p $DOCKER_COMPOSE_PROJECT_NAME -f ./docker/docker-compose-resetdb.yml up --abort-on-container-exit
   ;;
start)
   docker-compose -p $DOCKER_COMPOSE_PROJECT_NAME -f ./docker/docker-compose-local.yml up
   ;;
help)
   display_help
   ;;
*)
   echo "No command specified, displaying help"
   display_help
   ;;
esac
