#!/bin/bash

source /var/onap/functions

# _build_vnfsdk_images() - Builds VNFSDK images from source code
function _build_vnfsdk_images {
    install_package unzip
    pushd $vnfsdk_src_folder/refrepo/vnfmarket-be/deployment/docker/docker-refrepo
    build_docker_image .
    popd
}

# get_vnfsdk_images - Function that clones vnfsdk Docker images
function get_vnfsdk_images {
    if [[ "$build_image" == "True" ]]; then
        # TODO(sshank): Has errors building.
        _build_vnfsdk_images
    else
        pull_docker_image refrepo:1.0-STAGING-latest
        pull_docker_image refrepo:latest
    fi
}

# install_vnfsdk - Function that installs vnfsdk Docker images
function install_vnfsdk {
    install_docker_compose
    pushd $vnfsdk_src_folder/refrepo/vnfmarket-be/deployment/install
    /opt/docker/docker-compose up -d
    popd
}

# init_vnfsdk() - Init VNFSDK services
function init_vnfsdk {
    if [[ "$clone_repo" == "True" ]]; then
        clone_repos "vnfsdk"
        if [[ "$compile_repo" == "True" ]]; then
            compile_repos "vnfsdk"
        fi
    fi

    if [[ "$skip_get_images" == "False" ]]; then
        get_vnfsdk_images
        if [[ "$skip_install" == "False" ]]; then
            install_vnfsdk
        fi
    fi
}
