#!/bin/bash

baseDir="$( cd "$(dirname "$0")" && pwd )"
cd "$baseDir"

COL_OFF="\033[00m"
COL_BOLD="\033[01;01m"
COL_RED="\033[31m"

destDirPart1="dist"
destDirPart2="jess"

function prep {
  # output
  output="cmd/jess"
  # get version
  version=$(grep "info.Set" cmd/main.go | cut -d'"' -f4)
  # build versioned file name
  filename="jess_v${version//./-}"
  # platform
  platform="${GOOS}_${GOARCH}"
  if [[ $GOOS == "windows" ]]; then
    filename="${filename}.exe"
    output="${output}.exe"
  fi
  # build destination path
  destPath=${destDirPart1}/${platform}/${destDirPart2}/$filename
}

function check {
  prep

  # check if file exists
  if [[ -f $destPath ]]; then
    echo "[jess] $platform $version already built"
  else
    echo -e "[jess] ${COL_BOLD}$platform $version${COL_OFF}"
  fi
}

function build {
  prep

  # check if file exists
  if [[ -f $destPath ]]; then
    echo "[jess] $platform already built in version $version, skipping..."
    return
  fi

  # build
  ./cmd/build
  if [[ $? -ne 0 ]]; then
    echo -e "\n${COL_BOLD}[jess] $platform: ${COL_RED}BUILD FAILED.${COL_OFF}"
    exit 1
  fi
  mkdir -p $(dirname $destPath)
  cp $output $destPath
  echo -e "\n${COL_BOLD}[jess] $platform: successfully built.${COL_OFF}"
}

function check_all {
  GOOS=linux GOARCH=amd64 check
  GOOS=windows GOARCH=amd64 check
  GOOS=darwin GOARCH=amd64 check
  GOOS=linux GOARCH=arm64 check
  GOOS=windows GOARCH=arm64 check
  GOOS=darwin GOARCH=arm64 check
}

function build_all {
  GOOS=linux GOARCH=amd64 build
  GOOS=windows GOARCH=amd64 build
  GOOS=darwin GOARCH=amd64 build
  GOOS=linux GOARCH=arm64 build
  GOOS=windows GOARCH=arm64 build
  GOOS=darwin GOARCH=arm64 build
}

function build_os {
  # build only for current OS
  # set for script
  GOOS=$(go env GOOS)
  # architectures
  GOARCH=amd64 build
}

case $1 in
  "check" )
    check_all
    ;;
  "build" )
    build_all
    ;;
  "build-os" )
    build_os
    ;;
  * )
    echo ""
    echo "build list:"
    echo ""
    check_all
    echo ""
    read -p "press [Enter] to start building" x
    echo ""
    build_all
    echo ""
    echo "finished building."
    echo ""
    ;;
esac