#!/bin/bash

#Create directories: scenario.xml for all routing agents
for scen in dynamicring; do
    for par in Backoff_Ring Pure_Ring SLR_Ring Proba_Ring Backoff_NoRing SLR_NoRing Proba_NoRing; do
	dir="${scen}/${par}"
	mkdir -p $dir
	cp scenario.xml ${dir}/scenario.xml
        for i in 5 6 7 8 11 12 16 17 19 20
	do
	    #let j=$(( ( RANDOM % 10 )  + 1 )) NOOOOOO FOR STATISICQ
	    let j=i+101
	    let k=i+3001
	    if [ $par = "SLR_NoRing" ] ||  [ $par = "SLR_Ring" ]
	    then
		sed -i 's|<!--here-->|<cbr flowId="'$i'" srcId="'$i'" dstId="'$j'" port="'$k'" packetSize="1003" interval_ns="1000000" repetitions="10" startTime_ns="1000000"/><!--here-->|g' ${dir}/scenario.xml
	    else 
		sed -i 's|<!--here-->|<cbr flowId="'$i'" srcId="'$i'" dstId="-1" port="'$k'" packetSize="1003" interval_ns="1000000" repetitions="10" startTime_ns="1000000"/><!--here-->|g' ${dir}/scenario.xml
	    fi
	done 
	if [ $par = "Pure_Ring" ]
	then
	    sed -i 's/PureFloodingRouting/PureFloodingDynamicRingRouting rangeBig_nm="1000000" rangeSmall_nm="0"/g' ${dir}/scenario.xml
	    sed -i 's/DEDeN enabled="false"/DEDeN enabled="true"/g' ${dir}/scenario.xml
	elif [ $par = "SLR_NoRing" ]
	then
	    sed -i 's/PureFloodingRouting/SLRRouting commRangeSetup_nm="900000" anchor1id="1" anchor2id="2" anchor3id="3"/g' ${dir}/scenario.xml
	elif [ $par = "SLR_Ring" ]
	then
	    sed -i 's/PureFloodingRouting/SLRDynamicRingRouting commRangeSetup_nm="900000" anchor1id="1" anchor2id="2" anchor3id="3" rangeBig_nm="1000000" rangeSmall_nm="0"/g' ${dir}/scenario.xml
	    sed -i 's/DEDeN enabled="false"/DEDeN enabled="true"/g' ${dir}/scenario.xml
	elif [ $par = "Backoff_NoRing" ]
	then
	    sed -i 's/routing defaultBackoffWindow="10000"/routing/g' ${dir}/scenario.xml 
	    sed -i 's/PureFloodingRouting/BackoffFloodingRouting/g' ${dir}/scenario.xml
	    sed -i 's/DEDeN enabled="false"/DEDeN enabled="true"/g' ${dir}/scenario.xml
	elif [ $par = "Backoff_Ring" ]
	then
	    sed -i 's/routing defaultBackoffWindow="10000"/routing/g' ${dir}/scenario.xml
	    sed -i 's/PureFloodingRouting/BackoffFloodingDynamicRingRouting rangeBig_nm="1000000" rangeSmall_nm="0"/g' ${dir}/scenario.xml
	    sed -i 's/DEDeN enabled="false"/DEDeN enabled="true"/g' ${dir}/scenario.xml
	elif [ $par = "Proba_NoRing" ]
	then
	    sed -i 's/PureFloodingRouting/ProbaFloodingRouting probability="0.6"/g' ${dir}/scenario.xml
	elif [ $par = "Proba_Ring" ]
	then
	    sed -i 's/PureFloodingRouting/ProbaFloodingDynamicRingRouting probability="0.8" rangeBig_nm="1000000" rangeSmall_nm="0"/g' ${dir}/scenario.xml
	    sed -i 's/DEDeN enabled="false"/DEDeN enabled="true"/g' ${dir}/scenario.xml
	fi
    done
done


#no rngggggggggggg

#Run bitsimulator

for scen in dynamicring; do
    for par in SLR_Ring; do #start with slr ring, not in parallel with others because need its deden and slr init
	dir="${scen}/${par}"
	echo Running ${scen} ${par}
	if [ $par = "SLR_Ring" ] 
	then
	    time ./bitsimulator -D ${dir} --deden  > ${dir}/bit.txt
	fi
	awk '$1 == "1" &&  $6=="1003"'  ${dir}/events.log > ${dir}/receivedata.log
	awk '$1 == "0" &&  $6=="1003"'  ${dir}/events.log > ${dir}/senddata.log
    done
done


for scen in dynamicring; do
    for par in Backoff_Ring Pure_Ring Proba_Ring Backoff_NoRing SLR_NoRing Proba_NoRing; do
	#beginpar
	dir="${scen}/${par}"
	echo Running ${scen} ${par}	    
	if [ $par = "Proba_NoRing" ] 
	then
	    time ./bitsimulator -D ${dir} --probability 0.6 > ${dir}/bit.txt
	elif [ $par = "Proba_Ring" ] 
	then
	    cp ${scen}/SLR_Ring/densityError.log ${dir}/densityError.log
	    cp ${scen}/SLR_Ring/histo.log ${dir}/histo.log
	    time ./bitsimulator -D ${dir} --dedenLoadEstimationFromFile --probability 0.8 > ${dir}/bit.txt
	elif  [ $par = "SLR_NoRing" ]
	then
	    cp ${scen}/SLR_Ring/SLRPositions.log ${dir}/SLRPositions.log
	    time ./bitsimulator -D ${dir} --loadSLRPositionsFromFile > ${dir}/bit.txt
	elif  [ $par = "Backoff_NoRing" ] ||  [ $par = "Backoff_Ring" ]  ||  [ $par = "Pure_Ring" ]  ||  [ $par = "SLR_Ring" ]
	then
	    cp ${scen}/SLR_Ring/densityError.log ${dir}/densityError.log
	    cp ${scen}/SLR_Ring/histo.log ${dir}/histo.log
	    time ./bitsimulator -D ${dir} --dedenLoadEstimationFromFile> ${dir}/bit.txt
	fi
	awk '$1 == "1" &&  $6=="1003"'  ${dir}/events.log > ${dir}/receivedata.log 
	awk '$1 == "0" &&  $6=="1003"'  ${dir}/events.log > ${dir}/senddata.log
    done
    #endpar
done
#waitpar

for scen in dynamicring; do
    for par in Backoff_Ring Pure_Ring Proba_Ring SLR_Ring; do
	#beginpar
	dir="${scen}/${par}"
	awk '/onring/' ${dir}/bit.txt > ${dir}/bitt.txt #each time a nodes fwds, it is on the ring of how many transmitterss?
	awk '$4>max[$1]{max[$1]=$4; row[$1]=$0} END{for (i in row) print row[i]}' ${dir}/bitt.txt > ${dir}/bittt.txt  #cumulative maximum reached nb of transmitters that each node is onring of
	#rm  ${dir}/bitt.txt
	max=`awk -v idx=4 'NR==1 || $idx>max{max=$idx} END{print max}' ${dir}/bittt.txt`
	echo The maximum cost is ${max} transmitters for a node >  ${scen}/${par}/finalresults.txt
    done
done

#for flow 1 only, dest id = 102
#avg for all flows
for scen in dynamicring; do
    for par in Backoff_Ring Pure_Ring SLR_Ring Proba_Ring Backoff_NoRing SLR_NoRing Proba_NoRing; do
	dir="${scen}/${par}"
	if [ $par = "SLR_NoRing" ] ||  [ $par = "SLR_Ring" ]
	then
	    echo "flow packet_sequence sending_nodes_per_packet destination_reached" > ${scen}/${par}/results.txt
	else
	    echo "flow packet_sequence sending_nodes_per_packet receiving_nodes_per_packet" > ${scen}/${par}/results.txt
	fi
	#beginpar
	#dir="${scen}/${par}"
	for f in 5 6 7 8 11 12 16 17 19 20 #change depending on number of flows 
	do
	let m=f+101    
	    for p in `seq 0 9` #change depending on number of packets
	    do
		send=`awk -v P="$p" '$9==P && $8=="'$f'"' ${dir}/senddata.log | sort -k3,3 -u | wc -l`
		if [ $par = "SLR_NoRing" ] || [ $par = "SLR_Ring" ]
		then
		    receive=`awk -v P="$p" '$3=="'$m'" &&  $8==P && $7=="'$f'"' ${dir}/receivedata.log | sort -k3,3 -u | wc -l`
		else
		    receive=`awk -v P="$p" '$8==P && $7=="'$f'"' ${dir}/receivedata.log | sort -k3,3 -u | wc -l`
		fi
		echo ${f} ${p} ${send} ${receive} >>  ${scen}/${par}/results.txt
	    done
	done
	awk1=`awk '{s+=$3} END{print s/(NR - 1)}'  ${scen}/${par}/results.txt`
	awk2=`awk '{t+=$4} END{print t/(NR - 1)}'  ${scen}/${par}/results.txt`
	echo average number of forwarders, number of receivers respectively: ${awk1} ${awk2} >>  ${scen}/${par}/finalresults.txt
	#endpar
    done
done
#waitpar

#VisualTracer
for scen in dynamicring; do
    for par in Backoff_Ring Pure_Ring SLR_Ring Proba_Ring Backoff_NoRing SLR_NoRing Proba_NoRing; do
	dir="${scen}/${par}"
	awk '$8 == "5" && $9 == "0"'  ${dir}/senddata.log  >  ${dir}/newevents.log #first flow, first packet
	mv  ${dir}/events.log  ${dir}/oldevents.log
	mv  ${dir}/newevents.log  ${dir}/events.log
	echo '#<lineFormat id="0" key="s" description="packet sent">
#    <item type="Integer 64" key="time">simulation time in fs</item>
#    <item type="Integer 32" key="nodeID">node ID handling the event</item>
#    <item type="Integer 32" key="transmitterID">node ID of the MAC-level transmitter</item>
#    <item type="Integer 32" key="beta">beta</item>
#    <item type="Integer 32" key="size">packet size in bits</item>
#    <item type="Integer 32" key="pktType">packet type</item>
#    <item type="Integer 32" key="flow">flow id</item>
#    <item type="Integer 32" key="seqno">packet sequence number</item>
#    <item type="Integer 32" key="hopCount">hop count</item>
#    <item type="Integer 32" key="SLRX">SLRX</item>
#    <item type="Integer 32" key="SLRY">SLRY</item>
#    <item type="Integer 32" key="SLRZ">SLRZ</item>
#</lineFormat>' | cat - ${dir}/events.log > ${dir}/temp && mv ${dir}/temp  ${dir}/events.log #add dict send to top of events
    done
done

#now run ../../visualtracer --3d -s 1000000000000000000 --initialTimeSkip 1000000000000 in each subdirectory
