#!/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
}

wait_for_port "Postgres" airflow-postgres 5432

if [ -n "$INIT_AIRFLOW_DB" ]; then
    /var/airflow/env/bin/airflow db init

    /var/airflow/env/bin/airflow users create \
        --role Admin \
        --username admin \
        --email admin@admin.com \
        --firstname admin \
        --lastname admin \
        --password admin

    /var/airflow/env/bin/airflow users create \
        --role Op \
        --username guest \
        --email guest@guest.com \
        --firstname guest \
        --lastname guest \
        --password guest
fi

if [ -n "$MIGRATE_AIRFLOW_DB" ]; then
    /var/airflow/env/bin/airflow db upgrade
fi

# 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.${RUN_CONTAINER_AS}.conf"
