#!/bin/sh
# Extract CSV from JSON download format, for each of temp and humi.
# Assumes exactly one sensor's data (temp or humi) is present.

# Usage:
#     $0 ID
#         ID is the sensor ID and should match the data content
ID="$1"
if [ "" = "$ID" ]; then
    echo "ERROR: missing ID" 1>&2
    exit 1
fi

# Input captured data directory.
DATADIR=csv/.srcJSON
# Output file directory.
OUT=csv

# Start and end data filter value defaults.
STARTINCL=1733832000
ENDEXCL=1764979200
# Extract mapped start/end if available.
#kid,location,comment,starttime,endtime
#1644723,"5s","study / master bedroom",1733832000,1764979200
STMP="$(awk -F, < mapping.csv '$1 ~ /^'"$ID"'/ {print $4}')"
ETMP="$(awk -F, < mapping.csv '$1 ~ /^'"$ID"'/ {print $5}')"
if [ "" != "$STMP" ]; then STARTINCL="$STMP"; fi
if [ "" != "$ETMP" ]; then ENDEXCL="$ETMP"; fi

for kind in temp humi;
    do
    SRC="$DATADIR/$ID-$kind.json.xz"
    if [ ! -s "$SRC" ]; then
        echo "INFO: $SRC not present" 1>&2
        continue
    fi
    xz -d < "$SRC" | \
        jq -r --arg KID "$ID" 'map(select(.kid == ($KID|tonumber))) .[0].data | to_entries | map([.key,.value]) .[] | [(.[0] | tonumber), (.[1]*100|round/100)] | @csv' | 
        awk -F, -v S="$STARTINCL" -v E="$ENDEXCL" '\
            ($1>=S)&&($1<E) {print $0}' | \
        xz --best -e > "$OUT/$ID-$kind.csv.xz"
    done

exit 0
