#!/bin/bash

RASPs="Chamber Charger Discharge"
#RASPs="Chamber Charger"

ARDs="Trigger"
PAPs=""
VIRTDevs=""

DASs="TektrMSO56Standard"
Infrastructure="$RASPs $VIRTDevs"
#IntelligentDevs="$RASPs $VIRTDevs"

DEVs="GWInstekPSW160_GasManagement PfeifferVacuumDualGaugeThroughGnome232"


ALLDevs="$RASPs $DASs $DEVs"
#ALLDevs="$RASPs $OSCs $DASs $PAPs"


GM="golem@golem"
sshGM="ssh $GM"
XTERM="xterm -T $Dev -e ssh golem@$Dev"
DataB="psql -qAt -U golem golem_database"
SHM="/dev/shm/golem"
SHMdir="$SHM/$ThisDev"
SHM0="/dev/shm/golem/0"
NULL="1>/dev/null"
Everything2NULL="1>/dev/null 2>/dev/null"
GitlabUpstream="https://gitlab.com/golem-tokamak/dirigent"


#RUNinBACKGR="&> /dev/null"
RUNinBACKGR="&"

LogFunctionStart="LogIt Diving into .."
LogFunctionEnd="LogIt Ascending from .."
LogFunctionPassing="LogIt Passing by .."
LogFunctionGoingThrough="LogIt Going through .." 


#TEST https://stackoverflow.com/questions/3258243/check-if-pull-needed-in-git

function WebRec()
{

    echo $@ >> $WEBPATH/index.html

}

function gitlab_check(){
git fetch -v --dry-run 2>&1 |
    grep -qE "\[up\s+to\s+date\]\s+$(
        git branch 2>/dev/null |
           sed -n '/^\*/s/^\* //p' |
                sed -r 's:(\+|\*|\$):\\\1:g'
    )\s+" || {
        pull_newest_gitlab
        RsyncDevices 
}
}


function RASPCommand(){
    Result=`ssh -Y golem@$1 "source $1.sh;$2"`
    LogIt $2@$1: $Result
}

function DASCommand(){
    Result=`cd $SHM0/DASs/$1/;source notation.sh;$2`
    LogIt $2@$1: $Result
}

#DIRIGENT:
function Dirigent(){ ssh -Y golem@Dirigent "source Dirigent.sh; $@"; }
#RASPs:
function Chamber(){ ssh -Y golem@Chamber "source Chamber.sh; $@"; }
function Charger(){ ssh -Y golem@Charger "source Charger.sh; $@"; }
function Discharge(){ ssh -Y golem@Discharge "source Discharge.sh; $@"; }
#DASs
function TektrMSO56Standard(){ "source TektrMSO56Standard.sh; $@"; }  
#Analysis
function Web(){ "source Web.sh; $@"; }



function RASPsOpenSessionCommons(){
	mkdir -p $SHM
	sshfs golem@Dirigent:$SHM/ $SHM/
	echo OK
}	

function RASPsOpenSession(){
	echo OK
}

function RASPsCloseSession(){
    fusermount -u $SHM
    rm -rf $SHM
    killall -u golem
	echo OK
}

function LogIt() 
{
    if [ -e $SHM/SessionLogBook/SessionDate ]; then # check if session has been opened 
        echo  `date '+%H:%M:%S'`\\t  ${FUNCNAME[1]} $1 >> $SHM/SessionLogBook/LocalLogBook
        printf "`date +%H:%M:%S` #`cat $SHM/ShotNo` $ThisDev/${FUNCNAME[1]}:\t%s\n" "$1 $2 $3 $4"|tee -a $SHM/SessionLogBook/GlobalLogbook 
        printf "`date +%H:%M:%S` #`cat $SHM/ShotNo`   $ThisDev/${FUNCNAME[1]}:\t%s\n" "$1 $2 $3 $4">> $SHM0/ShotLogbook 
#        echo  `date '+%Y%m%d_%H:%M:%S'` >>$SHM/SessionLogBook/${FUNCNAME[1]} #Zatím spíše ne ...
	else 
        printf "`date +%H:%M:%S` $ThisDev/${FUNCNAME[1]}:\t%s\n" "$1 $2 $3 $4"
	fi
}	




function CommonInitDischarge()
{
    $LogFunctionPassing
    mkdir -p $SHM0/$SUBDIR/$ThisDev
    echo OK
}

	

function critical_error()
{
    LogIt  "Critical error: $1 ... Stopped"
    if xhost >& /dev/null ; then 
        echo pack [label .error -text {Critical error: $1 ... stopped}]|wish
    fi
}	

#http://192.168.2.116/phppgadmin/
#./Dirigent.sh -r DataBaseQuerry shot_no
function CurrentShotDataBaseQuerry
{
    echo "SELECT $1 FROM shots ORDER BY shot_no  DESC LIMIT 1;"|psql -qAt -U golem golem_database 
}

function CurrentSessionDataBaseQuerry
{
    echo "SELECT $1 FROM sessions ORDER BY session_no  DESC LIMIT 1;"|psql -qAt -U golem golem_database 
}


# Defaults, in case it is not defined in the driver itself

function PrepareDischarge() { $LogFunctionPassing; echo OK; }

function Arming()
{
    $LogFunctionGoingThrough
    echo OK
}

function PostDischargeFinals()
{
    $LogFunctionGoingThrough
    echo OK
}

function PostDisch()
{
    $LogFunctionGoingThrough
    echo OK
}

function DASsOpenSession()
{
	echo OK
}

function DASsCloseSession()
{
	echo OK
}

function Null ()
{
    $LogFunctionPassing
}



    
 
