#!/bin/bash

set -o xtrace

source /var/onap/functions

src_folder=$git_src_folder/vfc
vfc_repos=("gvnfm/vnflcm" "gvnfm/vnfmgr" "gvnfm/vnfres" "nfvo/catalog" "nfvo/driver/ems" "nfvo/driver/sfc" \
            "nfvo/driver/vnfm/gvnfm" "nfvo/driver/vnfm/svnfm" "nfvo/lcm" "nfvo/resmanagement" "nfvo/wfengine")

# clone_all_vfc_repos() - Function that clones VF-C source repo.
function clone_all_vfc_repos {
    for dirc in ${vfc_repos[@]}; do
        clone_repo vfc/$dirc $src_folder/$dirc
    done
}

# compile_all_vfc_repos() - Function that compiles VF-C source repo.
function compile_all_vfc_repos {
    install_python_package tox

    pushd $src_folder/gvnfm/vnflcm/lcm
    tox -e py27
    popd

    # TODO(sshank): Add compile for other vfc_repos. (Both Java and Python based.)
    # Python based:
    # gvnfm/vnflcm/lcm
    # gvnfm/vnfmgr/mgr
    # gvnfm/vnfres/res
    # nfvo/driver/vnfm/gvnfm/gvnfmadapter
    # nfvo/driver/vnfm/svnfm/zte/vmanager
    # nfvo/lcm

    # Java based:
    # nfvo/catalog
    # nfvo/driver/ems/ems/sems/boco/ems-driver
    # nfvo/driver/sfc/zte/sfc-driver
    # nfvo/driver/vnfm/gvnfm/juju/juju-vnfmadapter
    # nfvo/driver/vnfm/svnfm/huawei/vnfmadapter
    # nfvo/resmanagement
    # nfvo/wfengine
}

# install_vfc() - Download and install vfc service from source code
function install_vfc {
    # TODO(sshank): Add further installation steps if necessary.
    echo ""
}

# init_vfc() - Function that initialize VF-C services
function init_vfc {
    install_package libmysqlclient-dev

    if [[ "$clone_repo" == "True" ]]; then
        clone_all_vfc_repos
        if [[ "$compile_repo" == "False" ]]; then
            compile_all_vfc_repos
        fi
    fi

    install_vfc
}
