#!/bin/bash
set -e  # Stop script immediately if any command fails

FILE="datafile"

# 1. Pre-flight Check: Ensure we have enough disk space for gzip output
FILE_SIZE_KB=$(du -k "$FILE" | cut -f1)
REQUIRED_KB=$(( FILE_SIZE_KB / 4 ))
AVAILABLE_KB=$(df -k . | awk 'NR==2 {print $4}')

echo "Checking disk space..."
echo "File size: $((FILE_SIZE_KB / 1024)) MB | Estimated gzip space needed: $((REQUIRED_KB / 1024)) MB | Available: $((AVAILABLE_KB / 1024)) MB"

if [ "$AVAILABLE_KB" -lt "$REQUIRED_KB" ]; then
    echo "ERROR: Not enough disk space to compress $FILE safely!" >&2
    exit 1
fi

# 2. Calculate 120-day cutoff timestamp
CUTOFF=$(date -d "120 days ago" +%s)
echo "Cutoff epoch timestamp: $CUTOFF"

echo "Step 1: Safely compressing datafile inline..."
cat "$FILE" | gzip > datafile.gz.tmp && rm "$FILE" && mv datafile.gz.tmp datafile.gz

echo "Step 2: Filtering data newer than 120 days..."
# Delimit on '"Timestamp":', split the remainder at ',' or '}', and force numeric comparison (+ 0)
zgrep '^{"Power":.*"Timestamp":' datafile.gz | awk -F'"Timestamp":' -v cutoff="$CUTOFF" '
  NF > 1 {
    split($2, val, "[,}]");
    if ((val[1] + 0) >= cutoff) print $0;
  }
' | gzip > datafile.NEW.gz

echo "Step 3: Replacing original archive and uncompressing back to '$FILE'..."
rm datafile.gz
gzip -d -c datafile.NEW.gz > datafile.tmp && rm datafile.NEW.gz && mv datafile.tmp "$FILE"

echo "Done! Cleaned uncompressed datafile created safely:"
ls -lh "$FILE"
