#!/bin/bash

export DEFAULT_CLUSTER_ENV=k8s-dev1
export DEFAULT_SVN_BRANCH=1.3.4
export HOTFIX_SVN_BRANCH=1.3.5
export UNSTABLE_SVN_BRANCH=1.3.6
export SVN_BRANCH_ROOT="http://svn.dev.videonext.net/svn/va/branches"

export REGISTRY=registry.videonext.net
export REGISTRY_USERNAME=any
export REGISTRY_PASSWORD=any

export GIT_CONFIG_BASE_REPO=https://overcast-git.cavu.me/videoNEXT/config-base.git

# VAE-related private env
VAE_REGISTRY_HOST=updates-dev.cavu.me
VAE_REGISTRY_USERNAME=dev-registry
VAE_REGISTRY_PASSWORD=devReg017G

# Git-related env
export GIT_VSAAS="ssh://git@bb.videonext.com:7999/vsaas"
export GIT_VERSION_REPO="ssh://git@bb.videonext.com:7999/vsaas/version.git"

# Gitman-related env
export GITMAN_CACHE_DISABLE=true

# Default GOPROXY to speed up build Go apps
export GOPROXY=http://goproxy.cavu.me:3000

# =============================================================================
#  Deployment-specific variables
# =============================================================================

REVISION=`svn info $SCRIPTDIR 2>/dev/null|grep Revision|cut -f 2 -d ' '`
if [ -z "$REVISION" ]; then
    echo Can not determine SVN revision, assume 0
    REVISION=0
fi

# --------- environment selector handling ----------

if [ -d ~/.overcast ]; then
    echo Old environment selection schema selection detected, RESETTING to new one!
    rm -rf ~/.overcast
fi

if [ -f ~/.overcast-prod ]; then
    export OVERCAST_ENV=prod
    echo 'Environment type is [PROD]'
else
    export OVERCAST_ENV=dev
    echo 'Environment type is [DEV]'
fi


if [ ! -f ~/.overcast ]; then
    if [ -z "$CLUSTER_ENV" ]; then
        $CLUSTER_ENV=$DEFAULT_CLUSTER_ENV
        echo "Environment was not set, selecting '$CLUSTER_ENV' by default"
    fi
    echo $CLUSTER_ENV > ~/.overcast
fi

if [ ! -f ~/.overcast-svn ]; then
    echo "SVN branch was not set, selecting $DEFAULT_SVN_BRANCH by default"
    echo $DEFAULT_SVN_BRANCH > ~/.overcast-svn
fi


export CLUSTER_ENV=$(head -n1 ~/.overcast)
export SVN_BRANCH=$(head -n1 ~/.overcast-svn)
export DOCKER_DIR=$HOME/docker

# Check if we are on dev environment or on dedicated deployer
if [ "$OVERCAST_ENV"  == "dev" ]; then
    export BASE_DIR=$DOCKER_DIR/$SVN_BRANCH
else
    export BASE_DIR=$DOCKER_DIR
fi

export REV_DIR=$SCRIPTDIR/../revisions
export STAGE_DIR=$SCRIPTDIR/../stage
export ENV_DIR=$SCRIPTDIR/../env
export LOG_DIR=$SCRIPTDIR/../log

GIT_MIGRA_DIR=$BASE_DIR/images/migrated-to-git

# ---------- now, load environment -------------
echo "Cluster environment: [$CLUSTER_ENV]"
echo "SVN Branch: [$SVN_BRANCH]"

if [ ! -f "$ENV_DIR/environment.$CLUSTER_ENV" ]; then
    echo Environment file does not exist: $SCRIPTDIR/../env/environment.$CLUSTER_ENV
    exit 99
fi

export ENV_LOADER=~/.overcast-env

echo "#!/bin/bash" > $ENV_LOADER
chmod +x $ENV_LOADER 

OLD_IFS=$IFS
IFS=$'\n'
for line in $(cat $SCRIPTDIR/../env/environment.$CLUSTER_ENV); do
    [[ $line == \#* ]] && continue
    [[ ! $line =~ ([^[:space:]]*)=(.*) ]] && continue
    KEY=${BASH_REMATCH[1]}
    VALUE=${BASH_REMATCH[2]}
    echo export $KEY=\'$VALUE\' >> $ENV_LOADER
done
IFS=$OLD_IFS

. $ENV_LOADER

# --------------------------------------- git-config-url --------------
function git-config-url {
    if [ -z "$GIT_CONFIG_USERNAME"  ] || [ -z "$GIT_CONFIG_PASSWORD" ]; then
        echo $GIT_CONFIG_REPO
    else
        local PROTO=${GIT_CONFIG_REPO%%://*}
        local REPO=${GIT_CONFIG_REPO##*://}
        echo $PROTO://$GIT_CONFIG_USERNAME:$GIT_CONFIG_PASSWORD@$REPO
    fi
}

# ------------------------------------------- list-env ----------
function list-env {
    ls $SCRIPTDIR/../env/environment.* |
    while read line; do 
        echo ${line##*.}
    done
}

# -------------------------------------------- set-env ----------
function set-env {
    local ver=$1
    [ -z "$SELECTED_MODULE_DIR" ] && die 1 "Must provide environment name to set"
    [ -f $ENV_DIR/environment.$SELECTED_MODULE_DIR ] || die 1 "Environment does not exist"
    [ -d $BASE_DIR ] || die 1 "Base dir is missing. Run 'image-service set-branch $SVN_BRANCH' first"
    echo $SELECTED_MODULE_DIR > ~/.overcast
    echo SETTING NEW ENVIRONMENT: $SELECTED_MODULE_DIR
    . $SCRIPTDIR/_environment
    if [ -z "$ver" ]; then
        $BASE_DIR/deploy/iaas/${CLUSTER_IAAS}/cluster-login
    else
        $STAGE_DIR/$VERSION/cluster-login
    fi
    # Fetch additional environment from Git
    mkdir -p $STAGE_DIR/git
    rm -rf $STAGE_DIR/git/$CLUSTER_ENV
    git clone --depth 1 $(git-config-url) $STAGE_DIR/git/$CLUSTER_ENV
}

# -------------------------------------------- set-branch -------
function set-branch {
    [ "$OVERCAST_ENV" != "dev" ] && die 457 "'set-branch' can be run on DEV environment only"
    local branch=$1
    [ -z "$branch" ] && die 1 "Must provide branch to set"
    svn cat http://svn.dev.videonext.net/svn/va/branches/$branch/docker/README.md &>/dev/null
    [ $? == 0 ] || die 1 "Branch doesn't exist or is not Overcast-compatible"
    echo $branch > ~/.overcast-svn
    echo SETTING NEW SVN BRANCH: $branch
    if [ $branch != $SVN_BRANCH ]; then
        echo SVN branch changed!
        echo New branch is $branch
        echo
    fi
    . $SCRIPTDIR/_environment
    
    [ ! -d $DOCKER_DIR ] && mkdir -p $DOCKER_DIR
    if [ ! -d $BASE_DIR ]; then
        svn co $SVN_BRANCH_ROOT/$SVN_BRANCH/docker $BASE_DIR
    else
        svn up $BASE_DIR
    fi
    
    # Update symlink
    unlink $DOCKER_DIR/current &>/dev/null
    ln -s $BASE_DIR $DOCKER_DIR/current
}
