#!/bin/bash

if [[ $# -lt 2 ]]; then
  echo USAGE: ./pltsubseq [seq file] [node list]
  exit
fi
SEQFILE=$1
NLIST=$2
if [ ! -f "$SEQFILE" ]; then
  echo ERROR: File $SEQFILE does not exist
  exit
fi

function hl()
{
  local x1="$1"
  local y="$2"
  local x2="$3"
  local lt=${4:-"rgbcolor \"#0000FF\""} 
  local label="$5"
  local labelpos="$6"

  echo "set arrow from $x1,$y to $x2,$y nohead front lt $lt lw 2"
  if [[ -n $label ]]; then
    if [[ -n $labelpos ]]; then
      echo "set label \"$label\" at $labelpos center arial,10"
    else
	echo "set label \"$label\" at $(( x1 + (x2 - x1)/2 )),$y center arial,10"
    fi
  fi
}

function vl()
{
  local x=$1
  local lt=${2:-"rgbcolor \"#00FF00\""} 
  local label="$3"
  local labelpos="$4"

  echo "set arrow $gpltidx from $x, graph 0 to $x, graph 1 nohead front lt $lt lw 2"
  if [[ -n "$label" ]]; then 
    if [[ -n $labelpos ]]; then
	echo "set label  \"$label\" at $labelpos right font \"arial,10\""
    else
      echo "set label  \"$label\" at $x, graph 0.8 right font \"arial,10\""
    fi
  fi
}

function rect()
{
    local x1="$1"
    local x2="$2"
    local y1=${3:-"graph 0"}
    local y2=${4:-"graph 1"}
    local fc=${5:-"rgbcolor \"#7F7F7F\""}
    local label=$6
    local labelpos="$7"
    local fs=${8:-"transparent solid 0.3 noborder"}

    echo "set object  rectangle from $x1,$y1 to $x2,$y2 behind fc $fc fs $fs"
    
    if [[ -n "$label" ]]; then
      if [[ -n $labelpos ]]; then
         echo "set label  \"$label\" at $labelpos center font \"arial,10\""
      else 
         echo "set label  \"$label\" at $(( x1 + ((x2-x1)/2) )),$(( y1 + ((y2-y1)/2) )) center arial,10"
      fi
      
    fi
}

function pt()
{
    local x="$1"
    local y="$2"
    local fc=${3:-"rgbcolor \"#FF0000\""}
    local label=${4:-"$x,$y"}
    local fs=${5:-"empty"}
    local lw=${6:-"1"}

    echo "set object  cicle at $x,$y size 3 front fc $fc fs $fs lw $lw"
    
    echo "set label  \"$label\" at $x,$((y+5)) center font \"arial,10\""
    
}

echo "PROCESSING SUBSEQUENCE PLOT"

EXP=${SEQFILE%%.seq}
CST=$(echo ../bin/TestPSML)
OUTPUT=${SEQFILE}.${NLIST}.pdf

if [ ! -f "$NLIST" ]; then
  echo "  Creating ${EXP}.${NLIST}.offsets"
  echo -e "-o${EXP}.${NLIST}.offsets -n${NLIST} -F\n-q" | $CST $SEQFILE

  shade=32
  cat ${EXP}.${NLIST}.offsets | while read v len c offsets; 
  do 
      read -a olist <<< "$offsets"; 
      color=$(printf "#0000%x" $shade); 
      ((shade=(shade*2+1)%256)); 
      for idx in "${olist[@]}"; 
      do 
	  rect $idx $((idx+len-1)) "graph 0" "graph 1" "rgbcolor \"$color\"" $v "$(( idx + (len/2) )),graph 0.9"; 
      done 
  done > ${OUTPUT}.gplt; 
  #cat ${EXP}.${NLIST}.offsets | while read v len c offsets; do echo "  Creating ${EXP}.seq.${v}"; IFS=' ' read -a olist <<< "$offsets"; for idx in "${olist[@]}"; do awk '$1>=b && $1<=e' b=$idx e=$(($idx+$len-1)) $SEQFILE.pdf.dat; done > ${EXP}.seq.${v}; done
fi

echo set output \"${OUTPUT}\" >> ${OUTPUT}.gplt
grep -v "set output" ${SEQFILE}.pdf.gplt >> ${OUTPUT}.gplt

cat ${OUTPUT}.gplt | gnuplot

# TRACELEN=$(stat -c%s ${SEQFILE})
# TRACELEN=$(( TRACELEN / 2 ))
# MAXFID=$(cat ${EXP}.dict.txt | wc -l)

# echo "  Creating ${OUTPUT}"
# WIDTH=$(echo "scale=4; ${TRACELEN}/8/72" | bc); HEIGHT=4
# (
#   echo set terminal pdfcairo size ${WIDTH},${HEIGHT}
#   echo set output \"${OUTPUT}\"
#   echo set title \"${SEQFILE}.${NLIST}\"
#   echo set xlabel \"Time\"
#   echo set ylabel \"Action ID ordered by frequency\"
#   echo set xrange [1:${TRACELEN}]
#   echo set yrange [1:${MAXFID}]
#   echo plot \"${SEQFILE}.pdf.dat\" pt 7 ps 0.125 notitle, \\
#   IFS=',' read -a nlist <<< "$NLIST"
#   for (( i=0; i<"${#nlist[@]}-1"; i++ )); do
#     echo \"${EXP}.seq.${nlist[$i]}\" pt 7 ps 0.125 title \"${nlist[$i]}\", \\
#   done
#   echo \"${EXP}.seq.${nlist[${#nlist[@]}-1]}\" pt 7 ps 0.125 title \"${nlist[${#nlist[@]}-1]}\"
#   echo quit
# ) | gnuplot
# echo "TITLE: ${OUTPUT}" > ${OUTPUT}.info
# echo "Number of PTS: ${TRACELEN}" >> ${OUTPUT}.info
# echo "DIM: ${WIDTH}x${HEIGHT}" >> ${OUTPUT}.info
