#!/bin/bash
# -----------------------------------------------------------------------------
# Uploads ONOS Java API docs.
# -----------------------------------------------------------------------------

set -e

[ ! -d "$ONOS_ROOT" ] && echo "ONOS_ROOT is not defined" >&2 && exit 1
. $ONOS_ROOT/tools/build/envDefaults

user=${1:-${WIKI_USER:-$USER}}
remote=$user@api.onosproject.org

docs=$(onos-buck build //docs:external --show-output 2>/dev/null | tail -1 | cut -d\  -f2)

ONOS_VERSION_STRING=$ONOS_VERSION
if echo $ONOS_VERSION_STRING | grep '-'; then
    echo "ONOS version $ONOS_VERSION_STRING is a beta or RC. Skipping"
    exit 0
fi

scp $remote:/var/www/api/index.html /tmp/index.html
CURRENT_VERSION_STRING=`grep URL /tmp/index.html | sed "s%.*URL=/%%" | sed "s%/.*%%"`
CURRENT_VERSION_SPLIT=(${CURRENT_VERSION_STRING//\./ })
ONOS_VERSION_SPLIT=(${ONOS_VERSION_STRING//\./ })

if (( ${ONOS_VERSION_SPLIT[1]} >= ${CURRENT_VERSION_SPLIT[1]} )); then
    replace="1"
    echo "Should replace current version $CURRENT_VERSION_STRING with new ONOS version $ONOS_VERSION_STRING"
else
    echo "Not replacing current version $CURRENT_VERSION_STRING with ONOS version $ONOS_VERSION_STRING"
    replace="0"
fi

scp $docs $remote:/tmp/onos-apidocs-$ONOS_VERSION.tar.gz
ssh $remote "
    mkdir -p /var/www/api/$ONOS_VERSION
    cd /var/www/api/$ONOS_VERSION
    unzip /tmp/onos-apidocs-$ONOS_VERSION.tar.gz
    #mv onos-apidocs-$ONOS_VERSION/* .
    #rm -rf onos-apidocs-$ONOS_VERSION

    # bump /var/www/api/index.html
    if [ "$replace" == "1" ]; then
       sed -i -E 's#/[^/]+/#/$ONOS_VERSION/#g' /var/www/api/index.html
    fi
"
