#!/bin/bash

set -o xtrace

source /var/onap/functions

src_folder=$git_src_folder/policy
policy_repos=("api" "common" "docker" "drools-applications" "drools-pdp" "engine" "gui" "pap" "pdp")

# clone_all_policy_repos() - Function that clones Policy source repo.
function clone_all_policy_repos {
    for dirc in ${aai_repos[@]}; do
        clone_repo policy/$dirc $src_folder/$dirc
    done
}

# # compile_all_policy_repos() - Function that compiles Policy source repo.
function compile_all_policy_repos {
    for dirc in ${aai_repos[@]}; do
        compile_src $src_folder/$dirc
    done
}

# install_policy() - Function that clones and installs the Policy services from source code
function install_policy {
    if [[ "$build_image" == "True" ]]; then
        compile_src $src_folder/docker
        install_docker
        pushd $src_folder/docker
        install_maven
        mvn prepare-package
        cp -r target/policy-pe/* policy-pe/
        cp -r target/policy-drools/* policy-drools
        bash docker_verify.sh
        for image in os nexus db base drools pe; do
            asserts_image onap/policy/policy-$image
        done
        popd
    else
        pull_onap_image policy/policy-db onap/policy/policy-db:latest
        pull_onap_image policy/policy-pe onap/policy/policy-pe:latest
        pull_onap_image policy/policy-drools onap/policy/policy-drools:latest
        pull_onap_image policy/policy-nexus onap/policy/policy-nexus:latest
    fi
    pushd $src_folder/docker
    chmod +x config/drools/drools-tweaks.sh
    IP_ADDRESS=$(ifconfig eth0 | grep "inet addr" | tr -s ' ' | cut -d' ' -f3 | cut -d':' -f2)
    echo $IP_ADDRESS > config/pe/ip_addr.txt
    install_docker_compose
    /opt/docker/docker-compose up -d
    popd
}

# init_policy() - Function that initialize Policy services
function init_policy {
    clone_all_policy_repos
    if [[ "$compile_repo" == "True" ]]; then
        compile_all_policy_repos
    fi

    install_policy
}
