#!/bin/bash
set -eo pipefail

BASEDIR=$(dirname $0)
CURRENTDIR=$PWD
PROJECT_ROOT=$(cd ${BASEDIR}/..; pwd)

ARTIFACTS_S3BUCKET=${S3BUCKET:=metabase-artifacts}


export LANG=en_US.UTF-8
export LANGUAGE=$LANG
export LC_ALL=$LANG

CF_TEMPLATE=cloudformation-elasticbeanstalk.json
CF_TEMPLATE_PATH=/tmp/$CF_TEMPLATE
S3_CF_TEMPLATE_PATH=s3://$ARTIFACTS_S3BUCKET/eb/$CF_TEMPLATE

make_eb_version() {
    MB_TAG=$1
    MB_DOCKER_REPOSITORY=$2

    $(which locale) | $(which sort) || true

    if [[ -z $MB_TAG ]]; then
        echo "release name not provided!"
        exit 1
    fi

    if [[ -z $MB_DOCKER_REPOSITORY ]]; then
        echo "docker repository name not provided!"
        exit 1
    fi

    RELEASE_FILE="/tmp/${MB_TAG}.zip"

    echo "Building Elastic Beanstalk app version for Metabase using Docker Image: metabase/${MB_DOCKER_REPOSITORY}:${MB_TAG}"

    # dynamically insert our MB version into the EB config file
    sed "s/@@MB_REPOSITORY@@/${MB_DOCKER_REPOSITORY}/" < ${BASEDIR}/Dockerrun.aws.json.template > ${BASEDIR}/Dockerrun.aws.json.tmp
    sed "s/@@MB_TAG@@/${MB_TAG}/" < ${BASEDIR}/Dockerrun.aws.json.tmp > ${BASEDIR}/Dockerrun.aws.json

    # set the default version in the cloudformation template from the template-template (yo dawg i heard you like templates ;)
    sed "s/@@MB_TAG@@/${MB_TAG}/" < ${BASEDIR}/$CF_TEMPLATE.template > $CF_TEMPLATE_PATH

    # create our EB zip file
    cd $BASEDIR; zip -r ${RELEASE_FILE} .ebextensions Dockerrun.aws.json; cd $CURRENTDIR

    # clean up the temporary Dockerrun.aws.json file we created
    rm ${BASEDIR}/Dockerrun.aws.json.tmp
    rm ${BASEDIR}/Dockerrun.aws.json
}

upload_eb_version() {
    MB_TAG=$1

    $(which locale) | $(which sort) || true

    if [[ -z $MB_TAG ]]; then
        echo "release name not provided!"
        exit 1
    fi

    echo "uploading /tmp/${MB_TAG}.zip -> $ARTIFACTS_S3BUCKET/eb/"
    aws s3 cp /tmp/${MB_TAG}.zip s3://$ARTIFACTS_S3BUCKET/eb/${MB_TAG}.zip

    echo "uploading $CF_TEMPLATE_PATH -> $S3_CF_TEMPLATE_PATH"
    aws s3 cp $CF_TEMPLATE_PATH $S3_CF_TEMPLATE_PATH

}

create_eb_version() {
    EB_APPLICATION=Metabase
    MB_TAG=$1

    $(which locale) | $(which sort) || true

    if [[ -z $MB_TAG ]]; then
        echo "release name not provided!"
        exit 1
    fi

    echo "Creating app version in EB"
    aws elasticbeanstalk create-application-version --no-auto-create-application --region us-east-1 --application-name ${EB_APPLICATION} --version-label ${MB_TAG} --source-bundle S3Bucket="${ARTIFACTS_S3BUCKET}",S3Key="eb/${MB_TAG}.zip"
}

deploy_version() {
    MB_TAG=$1
    EB_ENVIRONMENT=$2

    $(which locale) | $(which sort) || true

    if [[ -z $MB_TAG ]]; then
        echo "release name not provided!"
        exit 1
    fi

    if [[ -z $EB_ENVIRONMENT ]]; then
        echo "beanstalk environment not provided!"
        exit 1
    fi

    aws elasticbeanstalk update-environment --region us-east-1 --environment-name ${EB_ENVIRONMENT} --version-label ${MB_TAG}
}
