# simplistic "venv" you can use with "source venv" (pwd = same directory is required)


function info() {
  t="$1"
  shift
  printf "[\033[32minfo\033[0m][venv] $t\n" "$@"
}

function warn() {
  t="$1"
  shift
  printf "[\033[33mwarning\033[0m][venv] $t\n" "$@"
}

function error() {
  t="$1"
  shift
  printf "[\033[31merror\033[0m][venv] $t\n" "$@"
}

project_dir="$(pwd)"
if [ ! -f "$project_dir/venv" ]; then
    error "please use for \"source venv\" the git root as working directory. I couldn't find \"$project_dir/venv\""
    exit 1
fi
PS1="(OpenCoDE) ${PS1:-}"

info "exporting $(grep -Ece '^[^#=][^#=]*' .env || echo 0) variables from .env"
set -a
source .env
cluster_config="$(realpath "$project_dir/../subcluster1.yaml")"
# set default cluster
if [ -f "$cluster_config" ]; then
    # shellcheck disable=SC2034 # false positive due to set -a
    KUBECONFIG="$cluster_config"
    info "set KUBECONFIG = $KUBECONFIG"
else
    warn "no cluster config found at $cluster_config. Only if you want to use kubectl you need one!"
fi
set +a

function set_alias() {
    #shellcheck disable=SC2139 # we want to set it during definition
    alias "${1:?}=${2:?}"
    info "$1\t\t${3:-${2}}"
}
set_alias gradlew "\"$project_dir/gradlew\" --project-dir \"$project_dir\"" "execute gradlew from anywhere"
set_alias compose "docker compose"
set_alias dev "kubectl --namespace=fraunhofer"
set_alias prod "kubectl --namespace=fraunhoferprod"

info "dev-overview\tshow dev pods / containers / state"
function dev-overview() {
    echo -e "Namespace:\tPod:\t\t\t\tContainer:\tready:"
    dev get pods -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\t"}{range .status.containerStatuses[*]}{.name}{"\t"}{.ready}{"\n"}{end}{end}'
}

info "prod-overview\tshow prod pods / containers / state"
function prod-overview() {
    echo -e "Namespace:\tPod:\t\t\t\tContainer:\tready:"
    prod get pods -o jsonpath='{range .items[*]}{.metadata.namespace}{"\t"}{.metadata.name}{"\t"}{range .status.containerStatuses[*]}{.name}{"\t"}{.ready}{"\n"}{end}{end}'
}

info "reload-venv\treload venv file"
function reload-venv() {
    PS1="${PS1:23}" # remove "(OpenCoDE) "
    source "${project_dir:?}/venv"
}