#!/bin/bash

set -o xtrace

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

# install_mariadb() - Pull and create a MariaDB container
function install_mariadb {
    pull_docker_image 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
}
