#!/bin/bash
command -v jq >/dev/null 2>&1 || { echo >&2 "jq command must be available. See http://stedolan.github.io/jq/.  Aborting."; exit 1; }

set -e

DEFAULT_API='api.datasift.com'

CC=${1:$CC}
DU=${2:-$DU}
DK=${3:-$DK}
API=${4:-$DEFAULT_API}

function ds(){
    ${CC} -a ${DU} ${DK} --u ${API} "$@" #| jq .
}

# core API - validate our hash, compile it, check our usage, dpu and balance
echo 'Validating CSDL'
csdl='interaction.content contains "music"'
valid=$(ds -e core -c validate -p csdl "$csdl" | jq .status)

if [ ${valid} != 200 ]; then
    echo "Validating CSDL failed"
    echo ${valid}
    exit -1
fi

echo 'Compiling'
hash=$(ds -e core -c compile -p csdl "$csdl" | jq -r .body.hash)
echo "Compiled and got $hash"

echo 'Usage :'
ds -e core -c usage | jq .

echo 'DPU :'
ds -e core -c dpu -p hash $hash | jq .

echo 'Balance :'
ds -e core -c usage | jq .

echo 'Preparing Historic query'
end=`expr $(date +%s) - 7200`
start=`expr $end - 3600`

historic=$(ds -e historics -c prepare -p start ${start} -p end ${end} -p name "Historics CLI @ $start" -p hash ${hash})
echo ${historic} | jq .
historic_id=$(echo ${historic} | jq -r .body.id)
echo "Historic created with ID $historic_id"

echo 'Validating Push subscription'
push_v=$(ds -e push -c validate -p playback_id ${historic_id} -p name "Playback CLI @ $start" -p output_type http \
-p output_params.method post -p output_params.url 'http://ec2-50-19-63-138.compute-1.amazonaws.com:80' \
-p output_params.delivery_frequency 0 -p output_params.max_size 102400 -p output_params.auth.type none \
-p output_params.verify_ssl false -p output_params.use_gzip true)
push_status=$(echo ${push_v} | jq .status)
echo ${push_v} | jq .

if [ ${push_status} != 200 ]; then
    echo "Validating Push subscription failed"
    exit -1
fi

echo 'Creating Push from Historic'
push=$(ds -e push -c create -p playback_id ${historic_id} -p name "Playback CLI @ $start" -p output_type http \
-p output_params.method post -p output_params.url 'http://ec2-50-19-63-138.compute-1.amazonaws.com:80' \
-p output_params.delivery_frequency 0 -p output_params.max_size 102400 -p output_params.auth.type none \
-p output_params.verify_ssl false -p output_params.use_gzip true)

echo "Created push subscription for historic"
echo ${push} | jq .
push_id=$(echo ${push} | jq -r .body.id)

echo 'Starting Historic query'
ds -e historics -c start -p id ${historic_id} | jq .

echo 'Getting Historic status'
ds -e historics -c status -p start ${start} -p end ${end} | jq .

echo 'Getting Historics'
ds -e historics -c get -p id ${historic_id} | jq .

echo 'Updating historic'
ds -e historics -c update -p id ${historic_id} -p name "Some name @ $start - CLI" | jq .

echo 'Getting push'
ds -e push -c get -p id ${push_id} | jq .

echo 'Getting push logs'
ds -e push -c log -p id ${push_id} | jq .

echo 'Pausing push'
ds -e push -c pause -p id ${push_id} | jq .

echo 'Resuming push'
ds -e push -c resume -p id ${push_id} | jq .

echo 'Stopping Historic'
ds -e historics -c stop -p id ${historic_id} | jq .

echo 'Deleting Historic'
ds -e historics -c delete -p id ${historic_id} | jq .

echo 'Stopping push'
ds -e push -c stop -p id ${push_id} | jq .

echo 'Deleting push'
ds -e push -c delete -p id ${push_id} | jq .
#todo update push, pull

echo "Attempting to create a Historics preview"
preview=$(ds -e preview -c create -p start ${start} -p end ${end} -p hash ${hash} -p sources twitter \
-p parameters 'interaction.author.link,targetVol,hour;interaction.type,freqDist,10')

echo ${preview} | jq .
preview_id=$(echo ${preview} | jq -r .body.id)


echo "Getting the preview we created"
ds -e preview -c get -p id ${preview_id} | jq .

echo "Creating a managed source"
source=$(ds -e managed_sources -c create -p source_type instagram -p name api \
     -p auth "[{\"parameters\":{\"value\":\"$start$end\"}}]" \
     -p resources '[{"parameters":{"value":"cats","type":"tag"}}]' \
     -p parameters '{"comments":true,"likes":false}')
echo ${source}
source_id=$(echo ${source}| jq -r .body.id)
echo ${source_id}

echo "Starting managed source"
ds -e managed_sources -c start -p source_id ${source_id} | jq .

echo "Getting managed sources"
ds -e managed_sources -c get | jq .

echo "Getting Instagram sources"
ds -e managed_sources -c get -p source_type instagram | jq .

echo "Getting Facebook page sources"
ds -e managed_sources -c get -p source_type facebook_page | jq .

echo "Getting page 2 of instagram sources"
ds -e managed_sources -c get -p source_type instagram -p page 2 | jq .

echo "Getting source for $source_id"
ds -e managed_sources -c get -p source_id ${source_id} | jq .

echo "Getting logs for source $source_id"
ds -e managed_sources -c log -p source_id ${source_id} -p page 2 -p per_page 1 | jq .

echo "Stopping managed source"
ds -e managed_sources -c stop -p source_id ${source_id} | jq .

echo "Deleting managed source $source_id"
ds -e managed_sources -c delete -p source_id ${source_id} | jq .
