#!/usr/bin/env bash

# trigger a milestone notification based off the latest favorited item
#
# usage:
#    ENVIRONMENT=local bash trigger-notification.bash [--upload-to-s3]
#
# options:
#    --upload-to-s3 - trigger by uploading a file to s3 bucket

set -euo pipefail

cleanup() {
  docker stop $1
}

trap 'cleanup $CONATINER_ID $? ' ERR

upload_to_s3=${1:-false}

log() {
  echo "$*" >&2
}

ENVIRONMENT=${ENVIRONMENT:-development}

log "reading environment variables from user-preferences-service for '$ENVIRONMENT' environment"; {
  export $(grep -v '^#' ../rti-user-preferences-service/.env."${ENVIRONMENT}" | xargs)
#  export $(grep -v '^#' ../ama-backend/.env.${ENVIRONMENT:-development} | xargs)
}

log "getting latest favorited track id"; {
  ENTITY_ID=$(PGPASSWORD="${POSTGRES_PASSWORD}" psql -X -A -t \
    -h "${POSTGRES_HOST:-localhost}" -p "${POSTGRES_PORT:-5432}" -U "${POSTGRES_USER:-pguser}" "${POSTGRES_DB:-postgres}" \
    -c 'select favorite_id from favorites order by id desc limit 1' \
  )

  export ENTITY_ID
}

log "creating fake milestone event file for $ENTITY_ID"; {
  MILESTONE_FILEPATH="$PWD"/data/scratch
  MILESTONE_FILENAME=milestone-"$ENTITY_ID".json
  export MILESTONE_FILEPATH
  export MILESTONE_FILENAME
  node -e "console.log(JSON.stringify({...require('./template.json'), entity_id: '$ENTITY_ID'}))" \
    > "$MILESTONE_FILEPATH"/"$MILESTONE_FILENAME"
}

log "running s3 service locally"; {
  container_name=minio-s3
  CONTAINER_ID=$(docker container inspect -f '{{ .Id }}' $container_name 2>/dev/null)

  docker stop $container_name

  if [[ $? -eq 1 ]]; then
    log "running container"
    CONTAINER_ID=$(docker run \
      --detach \
      --volume "$PWD"/data:/data \
      --publish 9998:9000 \
      --name $container_name \
      --env MINIO_ROOT_USER="$(aws configure get aws_access_key_id)" \
      --env MINIO_ROOT_PASSWORD="$(aws configure get aws_secret_access_key)" \
        minio/minio server data \
    )
  fi

  if [[ "$(docker inspect -f '{{.State.Running}}' $container_name)" == "false" ]]; then
    log "starting container"
    docker start $container_name
  fi

  CONTAINER_ID=$(docker container inspect -f '{{ .Id }}' $container_name)
  export CONTAINER_ID
}

if [[ "$upload_to_s3" == '--upload-to-s3' ]]; then
  log "triggering notification by uploading fake milestone event"; {
    aws s3 cp "$MILESTONE_FILEPATH"/"$MILESTONE_FILENAME" \
      s3://"${EVENTS_BUCKET:-qa-artistapp-notifications}"/scratch/"$MILESTONE_FILENAME"
  }
else
  log "triggering notification locally"; {
    cd ../rti-notifications-worker
    export S3_ENDPOINT=http://localhost:9998
    npm run cli s3://scratch/"$MILESTONE_FILENAME"
  }
fi

cleanup "$CONTAINER_ID"
