#!/bin/bash

# Print commands
# set -x

# Exit on first command failed
set -e

DIR="$(cd "$(dirname "$0")" && pwd)"
AWSLOCAL="${DIR}/../env/bin/awslocal"
DAGS_DIR="${DIR}/../airflow/dags"
REQS_FILE="${DIR}/../airflow/requirements.txt"

SERVICE_NAME="stmtdb-to-sf"
BUCKET_NAME="${SERVICE_NAME}-airflow"
SECRETS_PREFIX="${SERVICE_NAME}/airflow"
EXTRACT_SALES_SERVICE_NAME="${SERVICE_NAME}-extract-sales"

echo "Creating S3 Airflow bucket"

$AWSLOCAL s3 mb s3://$BUCKET_NAME

echo "S3 Airflow bucket created"

echo "Creating Airflow secrets"

$AWSLOCAL secretsmanager create-secret \
    --name $SECRETS_PREFIX/SF_PRIVATE_KEY \
    --secret-string $SF_PRIVATE_KEY

$AWSLOCAL secretsmanager create-secret \
    --name $SECRETS_PREFIX/SF_PASSPHRASE \
    --secret-string $SF_PASSPHRASE

echo "Getting list of Subnet IDs"

subnet_ids=$($AWSLOCAL ec2 describe-subnets \
    --query "Subnets[*].SubnetId" \
    | jq --raw-output '. | join(",")')

echo "Subnet IDs: ${subnet_ids}"

echo "Creating Airflow environment"

$AWSLOCAL mwaa create-environment \
    --name $SERVICE_NAME \
    --source-bucket-arn arn:aws:s3:::$BUCKET_NAME \
    --dag-s3-path /dags \
    --airflow-version 2.10.1 \
    --execution-role-arn arn:aws:iam::000000000000:role/airflow-role \
    --network-configuration {} \
    --airflow-configuration-options '{
        "custom.secrets_prefix": "'$SECRETS_PREFIX'",
        "custom.extract_sales_service_name": "'$EXTRACT_SALES_SERVICE_NAME'",
        "custom.subnet_ids": "'$subnet_ids'",
        "custom.sf_account": "'$SF_ACCOUNT'",
        "custom.sf_database": "'$SF_DATABASE'",
        "custom.sf_schema": "'$SF_SCHEMA'",
        "custom.sf_user": "'$SF_USER'",
        "custom.sf_role": "'$SF_ROLE'",
        "custom.sf_warehouse": "'$SF_WAREHOUSE'",
        "custom.outfile_bucket": "'$OUTFILE_BUCKET'",
        "custom.outfile_aws_key_id": "'$OUTFILE_AWS_KEY_ID'",
        "custom.outfile_aws_secret_key": "'$OUTFILE_AWS_SECRET_KEY'"
    }'

echo "Airflow environment created"

echo "Waiting for Airflow environment to be ready"

while :; do
    airflow_status=$($AWSLOCAL mwaa get-environment \
        --name $SERVICE_NAME \
        --query "Environment.Status" \
        --output text)

    echo "Airflow environment status is: ${airflow_status}"

    if [ "$airflow_status" == "AVAILABLE" ]; then
        break
    fi

    sleep 10
done

airflow_url=$($AWSLOCAL mwaa get-environment \
    --name $SERVICE_NAME \
    --query "Environment.WebserverUrl" \
    --output text)

echo "Airflow environment is ready at: ${airflow_url}"

echo "Syncing DAGs"

$AWSLOCAL s3 sync $DAGS_DIR s3://$BUCKET_NAME/dags

echo "DAGs synced"

echo "Copying requirements"

$AWSLOCAL s3 cp $REQS_FILE s3://$BUCKET_NAME/requirements.txt

echo "Requirements copied"
