#!/bin/bash
#
####################################################
#
# script to be called by all challenge scripts
#   to have a common query for systems, sid, and whatever
#
# INPUT: owner/group
#
####################################################

source /usr/share/Landscape/LandscapeCore/bin/get_values
source /etc/Landscape.d/SetupLandscape.${LandscapeUseCase}.challenge
export PATH="$PATH:$LandscapeIn/bin:$CHALLENGE_BIN"
set +u

GROUP=""
SYSTEM="all"
SAPNW=all
if [ -z "$printSummary" ]; then
    printSummary=0
fi

while [ $# -gt 0 ]; do
    case "$1" in
        --group=* ) GROUP=${1#--group=}
                   ;;
        --system=* ) SYSTEM=${1#--system=}
                   ;;
        --summary )
                   printSummary=1
                   ;;
    esac
    shift
done

if [ -z "$GROUP" ]; then
    echo "GROUP must be specified -> exit" >&2
    exit 2
fi

function querySystem()
{
    local system="$@"
    local systemKV
    for systemKV in ${system}; do
        sKey="${systemKV%=*}"; sKey=${sKey^^}
        sValue=${systemKV#*=}
        local SYSTEM_$sKey=$sValue
    done
    # BAUSTELLE
    if [ $GROUP = "all" -a $SYSTEM = "all" ]; then
        echo "$SYSTEM_SYSTEM $SYSTEM_IP $SYSTEM_HYP"
    elif [ $GROUP = "$SYSTEM_OWNER" -a $SYSTEM = "all" ]; then
        echo "$SYSTEM_SYSTEM $SYSTEM_IP $SYSTEM_HYP"
    elif [ $GROUP = "all" -a $SYSTEM = "$SYSTEM_SYSTEM" ]; then
        echo "$SYSTEM_SYSTEM $SYSTEM_IP $SYSTEM_HYP"
    elif [ $GROUP = "$SYSTEM_OWNER" -a $SYSTEM = "$SYSTEM_SYSTEM" ]; then
        echo "$SYSTEM_SYSTEM $SYSTEM_IP $SYSTEM_HYP"
    fi
}

function querySAPNW()
{
    local sapnw="$@"
    local sapnwKV
#echo $sapnw >&2
    for sapnwKV in ${sapnw}; do
        sKey="${sapnwKV%=*}"; sKey=${sKey^^}
        sValue=${sapnwKV#*=}
        local SAPNW_$sKey=$sValue
    done
    # BAUSTELLE
    if [ $GROUP = "all" -a $SAPNW = "all" ]; then
        echo "$SAPNW_SID $SAPNW_TYPE $SAPNW_INST $SAPNW_VNAME $SAPNW_IP $SAPNW_DBTYPE"
    elif [ $GROUP = "$SAPNW_OWNER" -a $SAPNW = "all" ]; then
        echo "$SAPNW_SID $SAPNW_TYPE $SAPNW_INST $SAPNW_VNAME $SAPNW_IP $SAPNW_DBTYPE"
    elif [ $GROUP = "all" -a $SAPNW = "$SAPNW_SAPNW" ]; then
        echo "$SAPNW_SID $SAPNW_TYPE $SAPNW_INST $SAPNW_VNAME $SAPNW_IP $SAPNW_DBTYPE"
    elif [ $GROUP = "$SAPNW_OWNER" -a $SAPNW = "$SAPNW_SAPNW" ]; then
        echo "$SAPNW_SID $SAPNW_TYPE $SAPNW_INST $SAPNW_VNAME $SAPNW_IP $SAPNW_DBTYPE"
    fi
}

function querySAPHana()
{
    local saphana="$@"
    local saphanaKV
#echo $saphana >&2
    for saphanaKV in ${saphana}; do
        sKey="${saphanaKV%=*}"; sKey=${sKey^^}
        sValue=${saphanaKV#*=}
        local SAPHANA_$sKey=$sValue
    done
    # BAUSTELLE
    if [ $GROUP = "all" ]; then
        echo "$SAPHANA_SID $SAPHANA_INST $SAPHANA_IP $SAPHANA_DBTYPE"
    elif [ $GROUP = "$SAPHANA_OWNER" ]; then
        echo "$SAPHANA_SID $SAPHANA_INST $SAPHANA_IP $SAPHANA_DBTYPE"
    fi
}

#
# get systems, which belongs to the owner/group
#
oSystemCount=0
for system in "${LandscapeSystems[@]}"; do
    result=$( querySystem "$system"  )
    if [ -n "$result" ]; then
        #echo "result: $result"
        (( oSystemCount++ ))
        case "$oSystemCount" in
            1 )  
                 read SYSNAME1 SYSIP1 SYSHYP X <<<$result
                 ;;
            2 )  
                 read SYSNAME2 SYSIP2 SYSHYP X <<<$result
                 ;;
            3 )
                 read SYSNAME3 SYSIP3 SYSHYP X <<<$result
                 ;;
            4 )  
                 read SYSNAME4 SYSIP4 SYSHYP X <<<$result
                 ;;
        esac
    fi
done
allSystems="$SYSNAME1 $SYSNAME2 $SYSNAME3 $SYSNAME4"

#
# get SAP NetWeaver sid, hostnames and IP addresses
#

oSAPDCount=0
for sapInstance in "${LandscapeSAPNetWeaver[@]}"; do
    result=$( querySAPNW "$sapInstance" )
    if [ -n "$result" ]; then
        #echo "result: $result"
        read mySID myTYPE X <<<$result
        case "$myTYPE" in
            db | DB )
                        read dbSID X1 dbVNAME dbIP dbTYPE X2 <<<$result
                        ;;
            ascs | ASCS )
                        read X0 X1 ascsINST ascsVNAME ascsIP X2 <<<$result
                        ;;
            ers | ERS )
                        read X0 X1 ersINST ersVNAME ersIP X2 <<<$result
                        ;;
            d | D )
                        (( oSAPDCount++ ))
                        case "$oSAPDCount" in
                            1 )
                                read X0 X1 d1INST d1VNAME d1IP X2 <<<$result
                                ;;
                            2 )
                                read X0 X1 d2INST d2VNAME d2IP X2 <<<$result
                                ;;
                        esac
                        ;;
        esac
    fi
done

for sapHana in "${LandscapeSAPHanaSR[@]}"; do
    result=$( querySAPHana "$sapHana" )
    if [ -n "$result" ]; then
        #echo "result: $result"
        #echo "$SAPHANA_SID $SAPHANA_INST $SAPHANA_IP $SAPHANA_DBTYPE"
        read hanaSID hanaINST hanaIP hanaDBTYPE X <<<$result
    fi
done

if [ "$printSummary" -eq 1 ]; then
    echo "systems:"
    echo "all: $allSystems"
    echo "SYS1: $SYSNAME1 $SYSIP1"
    echo "SYS2: $SYSNAME2 $SYSIP2"
    echo "SYS3: $SYSNAME3 $SYSIP3"
    echo "SYS4: $SYSNAME4 $SYSIP4"

    echo "sap netweaver:"
    echo "SID=$mySID"
    echo "DB: $dbSID $dbVNAME $dbIP $dbTYPE"
    echo "ASCS: $ascsINST $ascsVNAME $ascsIP"
    echo "ERS: $ersINST $ersVNAME $ersIP"
    echo "D1: $d1INST $d1VNAME $d1IP"
    echo "D2: $d2INST $d2VNAME $d2IP"

    echo "sap hana sr:"
    echo "hanaSID=$hanaSID"
    echo "hana $hanaSID $hanaINST $hanaIP $hanaDBTYPE"
fi
