#!/usr/bin/env bash

TRY_LOOP="20"
KEY_FILE="/root/.ssh/snowflake/rsa_key.p8"

wait_for_port() {
  local name="$1" host="$2" port="$3"
  local j=0
  while ! nc -z "$host" "$port" >/dev/null 2>&1 < /dev/null; do
    j=$((j+1))
    if [ $j -ge $TRY_LOOP ]; then
      echo >&2 "$(date) - $host:$port still not reachable, giving up"
      exit 1
    fi
    echo "$(date) - waiting for $name... $j/$TRY_LOOP"
    sleep 5
  done
}

export AIRFLOW_HOME=/var/airflow
export AIRFLOW_CONFIG=/var/airflow/airflow.cfg
export AIRFLOW__CORE__LOAD_EXAMPLES=False
export AIRFLOW__CORE__SQL_ALCHEMY_CONN="postgresql+psycopg2://$POSTGRES_USER:$POSTGRES_PASSWORD@$POSTGRES_HOST:$POSTGRES_PORT/$POSTGRES_DB"
wait_for_port "Postgres" "$POSTGRES_HOST" "$POSTGRES_PORT"

cd /var/airflow/ || exit 1
. env/bin/activate

airflow initdb

# Define snowflake connection.
if [[ "$OWS_ENV" == 'dev' ]] && [[ -f "$KEY_FILE" ]]; then
  export AIRFLOW_CONN_ORCH_SNOWFLAKE_DEFAULT="snowflake://$SNOWFLAKE_USER:$SNOWFLAKE_PASSWORD@delphi.us-east-1.snowflakecomputing.com/?account=$SNOWFLAKE_ACCOUNT&database=$SNOWFLAKE_DATABASE&role=$SNOWFLAKE_ROLE&schema=$SNOWFLAKE_SCHEMA&warehouse=$SNOWFLAKE_WAREHOUSE&private_key_file=$KEY_FILE"
else
  export AIRFLOW_CONN_ORCH_SNOWFLAKE_DEFAULT="snowflake://$SNOWFLAKE_USER:$SNOWFLAKE_PASSWORD@delphi.us-east-1.snowflakecomputing.com/?account=$SNOWFLAKE_ACCOUNT&database=$SNOWFLAKE_DATABASE&role=$SNOWFLAKE_ROLE&schema=$SNOWFLAKE_SCHEMA&warehouse=$SNOWFLAKE_WAREHOUSE"
fi


exec supervisord -c /etc/supervisor/conf.d/supervisord.conf
