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

FILE="datafile"

echo "Size before"
ls -lh "$FILE"

# 1. Pre-flight Check: Ensure we have enough disk space for gzip output
# Estimate required free space (~25% of the original uncompressed file size)
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
    echo "Need at least $((REQUIRED_KB / 1024)) MB free space, but only $((AVAILABLE_KB / 1024)) MB is available." >&2
    exit 1
fi

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

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..."
zgrep '^{"Power":.*"Timestamp":' datafile.gz | awk -F'[:,"}]' -v cutoff="$CUTOFF" '$6 >= cutoff' | 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"
