#!/bin/bash

set -o xtrace

source /var/onap/functions
rc_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
}
