#!/bin/bash

# Changing directory
echo "${0%/*}"
cd "${0%/*}"

WRITE=0
OVERWRITE=0
INSERT=0
PRINT=0
HOST="localhost:8081"

for i in "$@"
do
case $i in
    (-w|--write)
     WRITE=1
     echo "WRITE option set"
     ;;
    (-o|--overwrite)
     OVERWRITE=1
     echo "OVERWRITE option set"
     ;;
    (-i|--insert)
     INSERT=1
     echo "Data will be inserted"
     ;;
    (-p|--print)
     PRINT=1
     echo "Data will be printed to stdout"
     ;;
    (*)
     # unknown option
     ;;
esac
done

# Fetch and process interventions
#
ts=$(date "+%Y-%m-%dT%H:%M:%S%z")
source=$(uname -n)
version="2"

echo "<?xml version=\"1.0\" encoding=\"UTF-8\"?>" > out.xml
echo "<interventions version=\"$version\" timestamp=\"$ts\" source=\"$source\">" >> out.xml
for var in "$@"
do
if [[ $var =~ ^[0-9A-Z]{7,8}$ ]] 
  then
    printf "Downloading task $var... "
    t1=$(date +%s.%N)
    curl -s -k -o intv.json http://$HOST/intervention/$var/1/0/
    echo "<root><![CDATA[" > intv.xml; cat intv.json >> intv.xml; echo "]]></root>" >> intv.xml
    t2=$(date +%s.%N)
    printf "done (%1.5f s). Processing... " $(echo "$t2 - $t1" | bc)
    t1=$(date +%s.%N)
    cat intv.xml | xsltproc --maxvars 20000 --maxdepth 10000 json2xml.xslt - | xsltproc json2xml2.xslt - | xsltproc json2xml3.xslt - | xmllint --c14n - >> out.xml
    t2=$(date +%s.%N)
    printf "done (%1.4f)\n" $(echo "$t2 - $t1" | bc)
fi
done
echo "</interventions>" >> out.xml
cat out.xml | xmllint --format - > batch.xml

echo "Number of tasks downloaded: $(xmllint --xpath 'count(//intervention)' batch.xml)"

if [ $INSERT -eq 1 ]
  then
    # Hexadecimal representation of the batch
    cat batch.xml | xxd -pu | tr -d \\n | tr '[:lower:]' '[:upper:]' > batch.hex

    sha=$(shasum -a 1 batch.xml | awk '{ print $1 }' | tr '[:lower:]' '[:upper:]')
    sql="
    INSERT INTO npro_xml_imports_batches (uuid, source, raw_data) 
    VALUES (null, '$(uname -n)', x'$(cat batch.hex)')
    ON DUPLICATE KEY UPDATE
      uuid=VALUES(uuid), 
      source=VALUES(source), 
      raw_data=VALUES(raw_data), 
      processed_on=NULL, 
      process_output=NULL;
    CALL npro_import_xml_interventions('$sha', $OVERWRITE, $WRITE);" 

    mysql -u F5VksfQsYW -pmWaq9FiGC6 -h 192.168.10.10 NESA --raw --execute="$sql"
    echo $?
fi

if [ $PRINT -eq 1 ]
  then
    cat batch.xml
fi

# Cleanup
rm -f batch.hex batch.xml intv.xml intv.json out.xml

