#!/bin/bash

set -e

if [[ -n "${WORKER_TIMEOUT}" ]]; then
    re='^[0-9]+[smhd]?$'
    if ! [[ $WORKER_TIMEOUT =~ $re ]] ; then
        echo "Error: WORKER_TIMEOUT must be a number followed by an optional unit s,m,h,d (defaults to s). Current value: ${WORKER_TIMEOUT}";
        exit 1
    fi
    TIMEOUT_COMMAND="/usr/bin/timeout ${WORKER_TIMEOUT}"
    TIMEOUT_LOG_MSG="worker timeout is set to ${WORKER_TIMEOUT}"
else
    # Don't allow to directly set TIMEOUT_COMMAND, TIMEOUT_LOG_MSG without WORKER_TIMEOUT
    TIMEOUT_COMMAND=""
    TIMEOUT_LOG_MSG=""
fi

if [ ! -f "$PHP_ENTRYPOINT" ]; then
    echo "File not found as entrypoint at: '$PHP_ENTRYPOINT'"
    exit 1
fi

if [ "${Environment}" = 'qa' ] || [ "${Environment}" = 'prod' ]; then
    echo 'Setting task protection'
    RESPONSE=$(curl -sf -X PUT --retry 3 "${ECS_AGENT_URI}/task-protection/v1/state" -d '{"ProtectionEnabled":true, "ExpiresInMinutes":2880}')
    FAILURE_REASON=$(jq -r ".failure.Reason | select (.!=null)" <<< "${RESPONSE}")

    case $FAILURE_REASON in
      DEPLOYMENT_BLOCKED) echo "Could not set task protection due to in-progress deployment. Exiting..." && exit 0;;
      TASK_STOPPING_OR_STOPPED) echo "Could not set task protection because task is stopping. Exiting..." && exit 0;;
      TASK_NOT_VALID) echo "Task is not eligible for protection. Continuing...";;
      "") echo "Successfully set task protection";;
      *) echo "Failed to set task protection. Reason: ${FAILURE_REASON}" && exit 1;;
    esac
elif [ "${Environment}" = 'dev' ]; then
    export STORAGE_CREDENTIALS="{\"username\": \"$AWS_ACCESS_KEY_ID\", \"password\": \"$AWS_SECRET_ACCESS_KEY\", \"region\": \"$AWS_REGION\", \"session_token\": \"$AWS_SESSION_TOKEN\"}"
fi

if [ "${LOCAL_STACK}" = 'true' ]; then
    export DD_DB_HOST="${TEST_DD_DB_HOST}"
    export DD_DB_RW_USERNAME="${TEST_DD_DB_USERNAME}"
    export DD_DB_RW_PASSWORD="${TEST_DD_DB_PASSWORD}"
    export DD_DB_RO_USERNAME="${TEST_DD_DB_USERNAME}"
    export DD_DB_RO_PASSWORD="${TEST_DD_DB_PASSWORD}"
    export DD_DB_EO_USERNAME="${TEST_DD_DB_USERNAME}"
    export DD_DB_EO_PASSWORD="${TEST_DD_DB_PASSWORD}"
    export AR_DB_HOST="${TEST_AR_DB_HOST}"
    export AR_DB_USERNAME="${TEST_AR_DB_USERNAME}"
    export AR_DB_PASSWORD="${TEST_AR_DB_PASSWORD}"
    export AWS_REGION="${AWS_REGION:-us-east-1}"
    export S3_XML_BACKUP_ENDPOINT="http://moto:5000"
    export S3_XML_BACKUP_BUCKET="local-vector-audit"
fi

echo "Starting worker at ${PHP_ENTRYPOINT} ${TIMEOUT_LOG_MSG}"
CMD="${TIMEOUT_COMMAND} php ${PHP_ENTRYPOINT} ${SCRIPT_ARGUMENTS}"

if [ "${Environment}" = 'dev' ]; then
    find . -name '*.php' | entr -sn "killall php ; $CMD &"
else
    $CMD
fi
