#!/bin/bash

source /var/onap/sdnc
source /var/onap/functions

# _build_appc_images() - Function that creates APPC images from source code.
function _build_appc_images {
    get_sdnc_images
    build_docker_image ${src_folders[appc]}/deployment/installation/appc docker
}

# get_appc_images() - Function that gets or build APPC docker images
function get_appc_images {
    if [[ "$build_image" == "True" ]]; then
        _build_appc_images
    else
        for image in appc-image dgbuilder-sdnc-image; do
            pull_openecomp_image $image openecomp/$image:latest
        done
    fi
}

# install_appc() - Function that clones and installs the APPC services from source code
function install_appc {
    run_docker_compose ${src_folders[appc]}/deployment/docker-compose
}

# init_appc() - Function that initialize APPC services
function init_appc {
    if [[ "$clone_repo" == "True" ]]; then
        clone_repos "appc"
        if [[ "$compile_repo" == "True" ]]; then
            compile_repos "appc"
        fi
    fi

    if [[ "$skip_get_images" == "False" ]]; then
        get_appc_images
        if [[ "$skip_install" == "False" ]]; then
            install_appc
        fi
    fi
}
