#!/bin/bash
set -euo pipefail

SCRIPTPATH="$( cd "$(dirname "$0")" ; pwd -P )"

REPO_ROOT_PATH="${SCRIPTPATH}/../"
MAKE_FILE_PATH="${REPO_ROOT_PATH}/Makefile"
BIN_DIR="${SCRIPTPATH}/../build/bin"
mkdir -p "${BIN_DIR}"

VERSION=$(make -s -f ${MAKE_FILE_PATH} version)
PLATFORMS=("linux/amd64")

USAGE=$(cat << 'EOM'
  Usage: build-binaries  [-p <platform pairs>]
  Builds static binaries for the platform pairs passed in

  Example: build-binaries -p "linux/amd64,linux/arm"
          Optional:
            -p          Platform pair list (os/architecture) [DEFAULT: linux/amd64]
            -v          VERSION: The application version of the docker image [DEFAULT: output of `make version`]
EOM
)

# Process our input arguments
while getopts "dp:v:" opt; do
  case ${opt} in
    p ) # Platform Pairs
        IFS=',' read -ra PLATFORMS <<< "$OPTARG"
      ;;
    v ) # Image Version
        VERSION="$OPTARG"
      ;;
    \? )
        echo "$USAGE" 1>&2
        exit
      ;;
  esac
done

for os_arch in "${PLATFORMS[@]}"; do
    os=$(echo $os_arch | cut -d'/' -f1)
    arch=$(echo $os_arch | cut -d'/' -f2)
    container_name="extract-aeis-$os-$arch"
    repo_name="aeis-bin"
    base_bin_name="ec2-instance-selector"
    bin_name="${base_bin_name}-${os}-${arch}"

    docker container rm $container_name || :
    $SCRIPTPATH/build-docker-images -p $os_arch -v $VERSION -r $repo_name
    docker container create --rm --name $container_name "$repo_name:$VERSION-$os-$arch"
    docker container cp $container_name:/ec2-instance-selector $BIN_DIR/$bin_name

    cp ${BIN_DIR}/${bin_name} ${BIN_DIR}/${base_bin_name}
    tar -zcvf ${BIN_DIR}/${bin_name}.tar.gz -C ${BIN_DIR} ${base_bin_name}
    rm -f ${BIN_DIR}/${base_bin_name}
done
