#!/bin/bash

set -o xtrace

source /var/onap/functions
source /var/onap/asserts

# install_mariadb() - Pull and create a MariaDB container
function install_mariadb {
    is_package_installed docker-ce || install_docker
    docker pull mariadb
    docker create --name data_vol_portal -v /var/lib/mysql mariadb
}

# install_portal() - Function that pulls and install the source code of Portal
function install_portal {
    local src_folder=/opt/portal
    clone_repo portal $src_folder
    clone_repo portal/sdk $src_folder/sdk
    install_docker
    docker rm -f ecompdb_portal
    docker rm -f 1610-1
    pushd $src_folder/deliveries
    if [[ "$build_image" == "True" ]]; then
        install_maven

        clone_repo ecompsdkos $src_folder/ecompsdkos
        clone_repo "ui/dmaapbc" $src_folder/dmaapbc
        chmod +x *.sh
        export MVN=$(which mvn)
        export GLOBAL_SETTINGS_FILE=/usr/share/maven3/conf/settings.xml
        export SETTINGS_FILE=$HOME/.m2/settings.xml
        bash run.sh
        compile_src $src_folder/ecomp-portal-widget-ms
        build_docker_image $src_folder/ecomp-portal-widget-ms
    else
        pull_openecomp_image portaldb ecompdb:portal
        pull_openecomp_image portalapps ep:1610-1

    fi
    for image in ecompdb:portal ep:1610-1; do
        asserts_image $image
    done

    chmod +x new_start.sh
    chmod +x new_stop.sh
    chmod +x dbstart.sh
    mkdir -p /PROJECT/OpenSource/UbuntuEP/logs
    install_package unzip
    unzip -o etc.zip -d /PROJECT/OpenSource/UbuntuEP/

    bash dbstart.sh
    bash new_start.sh

    sleep 180

    if [ ! -e /opt/config/boot.txt ]; then
        install_package mysql-client
        mysql -u root -p'Aa123456' -h $IP_ADDRESS < Apps_Users_OnBoarding_Script.sql
        echo "yes" > /opt/config/boot.txt
    fi
    popd
}

# init_portal() - Function that initialize Portal services
function init_portal {
    install_mariadb
    install_portal
}
