#!/bin/bash

# Kubernetes Commands
alias k="kubectl"
alias kapp="k apply"
alias kconf="k config"
alias kdel="k delete --wait=false"
alias kdesc="k describe"
alias kev="k events"
alias kflog="klog -f"
alias kget="k get"
alias klist="k list"
alias klog="k logs"
alias kport="k port-forward"
alias kroll="k rollout"
alias krun="k exec"

# Resource accessors
alias kcfgm="kget configmaps"
alias kdeps="kget deployments"
alias kjobs="kget jobs"
alias kpods="kget pods"
alias kpv="kget pv"
alias kpvc="kget pvc"
alias ksvcs="kget services"

# Context switching utility
# To utilize this function, store additional kube-configs in ${HOME}/.kube/${CONTEXT}-config
# eg ${HOME}/.kube/test-config
function ktx {
    CONTEXT=$1
    NAMESPACE=${2:-default}

    # File paths
    KUBE_ROOT="${HOME}/.kube"
    BASE_KUBECONFIG="${KUBE_ROOT}/config"
    CONTEXT_KUBECONFIG="${KUBE_ROOT}/${CONTEXT}-config"

    # Logic
    if [[ -z "$CONTEXT" ]]; then
        # Display context information with no arguments
        echo "Current context:"
        echo "  $(k config current-context)/$(kubectl config view --minify -o jsonpath='{..namespace}')"
        echo "All contexts:"
        k config get-contexts | sed 's/^/  /'
    else
        # Set up an alternate context when arguments are supplied and one exists
        if [[ -f "$CONTEXT_KUBECONFIG" ]]; then
            echo "Including kubeconfig \"${CONTEXT_KUBECONFIG}\"."
            export KUBECONFIG="${BASE_KUBECONFIG}:${CONTEXT_KUBECONFIG}"
        else
            echo "Using default kubeconfig \"${BASE_KUBECONFIG}\"."
            export KUBECONFIG="${BASE_KUBECONFIG}"
        fi
        if [[ -n "$(k config use-context $CONTEXT 2>/dev/null)" ]]; then
            echo "Setting default namespace to \"${NAMESPACE}\"."
            k config set-context --current --namespace="$NAMESPACE"
        else
            echo "Unable to configure non-existent context \"$CONTEXT\"."
        fi
    fi
}
