#!/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 {
    clone_all_vfc_repos
    if [[ "$compile_repo" == "False" ]]; then
        compile_all_vfc_repos
    fi

    # TODO(sshank): Add further installation steps if necessary.
}

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