#!/bin/bash

# Script to build api module
# flags to accept:
# ee: build for enterprise edition.
# Default will be OSS build.

# Example
# Usage: IMAGE_TAG=latest DOCKER_REPO=myDockerHubID bash build.sh

ARCH=${ARCH:-amd64}
# To keep backward compatibility with existing scripts
if [[ $ARCH == 'amd64' ]]; then
    ARCH='linux/amd64'
elif [[ $ARCH = 'arm64' ]]; then
    ARCH='linux/arm64'
fi

GIT_ROOT=$(git rev-parse --show-toplevel)
source $GIT_ROOT/scripts/lib/_docker.sh

git_sha=$(git rev-parse --short HEAD)
image_tag=${IMAGE_TAG:-$git_sha}
check_prereq() {
    which docker || {
        echo "Docker not installed, please install docker."
        exit 100
    }
}

# Sourcing init scripts
for file in ./build_init_*; do
    if [ -f "$file" ]; then
        echo "Sourcing $file"
        source "$file"
    fi
done

chart=frontend
[[ $1 == ee ]] && ee=true
[[ $PATCH -eq 1 ]] && {
    __app_version="$(grep -ER ^.ppVersion ../scripts/helmcharts/openreplay/charts/${chart} | xargs | awk '{print $2}' | awk -F. -v OFS=. '{$NF += 1 ; print}' | cut -d 'v' -f2)"
    sed -i "s/^VERSION = .*/VERSION = $__app_version/g" .env.sample
    image_tag="v${__app_version}"
    [[ $ee == "true" ]] && {
        image_tag="${image_tag}-ee"
    }
}
update_helm_release() {
    [[ $ee == true ]] && return
    HELM_TAG="$(grep -iER ^version ../scripts/helmcharts/openreplay/charts/$chart | awk '{print $2}' | awk -F. -v OFS=. '{$NF += 1 ; print}')"
    # Update the chart version
    sed -i "s#^version.*#version: $HELM_TAG# g" ../scripts/helmcharts/openreplay/charts/$chart/Chart.yaml
    # Update image tags
    sed -i "s#ppVersion.*#ppVersion: \"v${__app_version}\"#g" ../scripts/helmcharts/openreplay/charts/$chart/Chart.yaml
    # Commit the changes
    git add .env.sample
    git add ../scripts/helmcharts/openreplay/charts/$chart/Chart.yaml
    git commit -m "chore(helm): Updating $chart image release"
}

# https://github.com/docker/cli/issues/1134#issuecomment-613516912
export DOCKER_BUILDKIT=1
function build() {
    # Run docker as the same user, else we'll run in to permission issues.
    docker build -t ${DOCKER_REPO:-'local'}/frontend:${image_tag} --platform ${ARCH} --build-arg GIT_SHA=$git_sha .
    [[ $PUSH_IMAGE -eq 1 ]] && {
        docker push ${DOCKER_REPO:-'local'}/frontend:${image_tag}
    }
    [[ $SIGN_IMAGE -eq 1 ]] && {
        cosign sign --key $SIGN_KEY ${DOCKER_REPO:-'local'}/frontend:${image_tag}
    }
    echo "frontend build completed"
}

check_prereq
build $1
[[ $PATCH -eq 1 ]] && update_helm_release || true
