#!/bin/bash

LOG_FILE="fix_gz_universal.log"
TMP_PROCESSED=$(mktemp) || exit 1  # Create a temporary file to store the list of processed files

# Extract successfully processed files from the log (null-separated)
if [[ -f "$LOG_FILE" ]]; then
    grep "Successfully recompressed: " "$LOG_FILE" | 
    sed 's/.*Successfully recompressed: //' |
    tr '\n' '\0' > "$TMP_PROCESSED"
else
    truncate -s 0 "$TMP_PROCESSED"  # Empty file
fi

# Find all .gz files and exclude those that have already been processed
find . -type f -name "*.gz" -print0 |
grep -zvFf "$TMP_PROCESSED" |  # Use grep to exclude processed files
while IFS= read -r -d '' file; do
    dir=$(dirname "$file")
    base_name=$(basename "$file" .gz)
    temp_file="$dir/$base_name"

    # Append processing logs to the file
    {
        echo "[Processing] Handling file: $file"
        
        # Attempt to decompress
        if gzip -d "$file" 2>/dev/null; then
            echo "  Decompressed: $temp_file"
        else
            echo "  Decompression failed, moving to temp"
            mv -- "$file" "$temp_file"
        fi

        # Recompress
        echo "  Recompressing: $temp_file"
        if gzip --best -c "$temp_file" > "$file" && touch -r "$temp_file" "$file"; then
            rm -- "$temp_file"
            echo "  Successfully recompressed: $file"  # Key line: Marks successful processing
        else
            echo "  [ERROR] Recompression failed, restoring"
            mv -- "$temp_file" "$file"
        fi
    } >> "$LOG_FILE" 2>&1
done

rm "$TMP_PROCESSED"  # Clean up temporary file
echo "Operation completed. Log file: $LOG_FILE"

