#!/usr/bin/env bash

set -euo pipefail

epoch=$((7*24*60*60))
ticks_per_packet=$((60*120))
time_to_live=$((3*$epoch))
buffer_size=$((3*7*24*60*60))
duty=300

run() {
  local router=$1
  local community=$2
  local seed=$3
  local shed=$4

  echo 'start:' $@ >&2
  python main.py \
    --router "$router" \
    --community "$community" \
    --seed "$seed" \
    --community-args \
      "epoch=${epoch}" \
    --trace "csv" \
    --trace-args \
      "path=shed/data/pp_${shed}_reduced.csv" \
    --node-args \
      "tick_time=${duty}" \
      "buffer_size=${buffer_size}" \
    --packet-args \
      "ticks_per_packet=${ticks_per_packet}" \
      "time_to_live=${time_to_live}" \
      "start_delay=${epoch}"
  echo 'done:' $@ >&2
}

nproc=$(nproc)


for shed in $@; do
for seed in {1..10}; do

  for router in direct epidemic; do
    [[ "$(jobs | wc -l)" -ge "$nproc" ]] && wait -n
    mkdir -p "logs/${router}"
    run "$router" "none" "$seed" "$shed" > "logs/${router}/${shed}_${seed}.log" &
  done

  for router in bubble hcbf; do
    for community in kclique louvain; do
      [[ "$(jobs | wc -l)" -ge "$nproc" ]] && wait -n
      mkdir -p "logs/${router}_${community}"
      run "$router" "$community" "$seed" "$shed" > "logs/${router}_${community}/${shed}_${seed}.log" &
    done
  done
done
done

wait

./util/runner_all_summary logs/*/*.log

# send slack notification if the script exists
status=$?
notify=$HOME/dev/slack-notifier/send_notification_via_slack.py
[[ -e "$notify" ]] && $notify "\`$shed done: exit($status)\`"