#!/usr/bin/env bash

set -o errexit
set -o nounset
set -o pipefail

ROOT=$(cd $(dirname "${BASH_SOURCE[0]}")/../..; pwd -P)

source $ROOT/hack/lib/vars.sh
source $ROOT/hack/lib/version.sh

DEFAULT_IMG_PROJECT="dbaas"
DEFAULT_ECR_IMG_PROJECT="dbaas"
DEFAULT_GCR_IMG_PROJECT="pingcap-gardener/dbaas"

# e.g. gcr.io
lib::image::get_image_registry() {
    declare -n _registry=$1

    case $VAR_IMG_HUB in
    ecr)
	    local account=$(aws sts get-caller-identity --query Account --output text)
        _registry="${account}.dkr.ecr.${VAR_AWS_REGION}.amazonaws.com"
        ;;
    gcr)
        _registry="gcr.io"
        ;;
    local)
	    _registry=localhost
        ;;
    pingcap)
	    _registry=hub.pingcap.net
        ;;
    custom)
	    _registry=${VAR_IMG_REGISTRY}
        ;;
    *)
        echo "Unknown image hub: ${VAR_IMG_HUB}"
        echo "Please see ./hack/lib/vars.sh#VAR_IMG_HUB"
        return 1
        ;;
    esac
}

# e.g. library/alpine
lib::image::get_image_repo() {
    declare -n _repo=$1

    local target=${2}
    local project=${VAR_IMG_PROJECT}
    if [[ $VAR_IMG_PROJECT == "" ]]; then
        case $VAR_IMG_HUB in
        ecr)
            project=${DEFAULT_ECR_IMG_PROJECT}
            ;;
        gcr)
            project=${DEFAULT_GCR_IMG_PROJECT}
            ;;
        *)
            project=${DEFAULT_IMG_PROJECT}
            ;;
        esac

    fi
    _repo=${project}/${VAR_IMG_PREFIX}-${target}
}

lib::image::get_image() {
    declare -n _image=$1

    local target=${2}
    local version=${3:-"$VAR_IMG_VERSION"}

    lib::image::get_image_registry registry
    lib::image::get_image_repo repo $target

    if [[ $version == "" ]]; then
        version=$(lib::version::get_image_version)
    fi

    _image=${registry}/${repo}:${version}
}
