#!/bin/bash

BASE_URL="https://dbl.ipfire.org/lists"

CATEGORIES=(
    "ads" "dating" "doh" "gambling" "games"
    "malware" "phishing" "piracy" "porn"
    "shopping" "smart-tv" "social" "streaming" "violence"
)

# Create temp directory
TEMP_DIR=$(mktemp -d)
trap "rm -rf $TEMP_DIR" EXIT

echo "Downloading IPFire DBL..."
echo "================================"

# Download all categories
FAILED=()
for category in "${CATEGORIES[@]}"; do
    printf "%-12s" "${category}:"
    
    if wget -q -O "${TEMP_DIR}/${category}.txt" \
        "${BASE_URL}/${category}/domains.txt"; then
        lines=$(wc -l < "${TEMP_DIR}/${category}.txt")
        printf " ✓ %6s domains\n" "$lines"
    else
        printf " ✗ FAILED\n"
        FAILED+=("$category")
    fi
done

# Show failed downloads if any
if [ ${#FAILED[@]} -gt 0 ]; then
    echo ""
    echo "Warning: Failed to download: ${FAILED[*]}"
fi

# Create archive with best compression
echo ""
echo "Creating tar.gz archive (best compression)..."
TIMESTAMP=$(date +"%Y%m%d_%H%M%S")
ARCHIVE_NAME="ipfire_dbl_${TIMESTAMP}.tar.gz"

# Use pigz if available for parallel compression, otherwise gzip
if command -v pigz >/dev/null 2>&1; then
    tar -cf - -C "$TEMP_DIR" . | pigz -9 > "$ARCHIVE_NAME"
else
    tar -czf "$ARCHIVE_NAME" -C "$TEMP_DIR" .
fi

if [ $? -eq 0 ]; then
    echo "✓ Archive created: ${ARCHIVE_NAME}"
    
    # Generate b2sum
    echo "Generating b2sum checksum..."
    b2sum "$ARCHIVE_NAME" | tee "${ARCHIVE_NAME}.b2sum"
    
    # Show archive info
    echo ""
    echo "Archive info:"
    echo "  File: ${ARCHIVE_NAME}"
    echo "  Size: $(du -h "$ARCHIVE_NAME" | cut -f1)"
    echo "  Files: $(tar -tzf "$ARCHIVE_NAME" | wc -l)"
    echo "  Checksum: ${ARCHIVE_NAME}.b2sum"
else
    echo "✗ Failed to create archive"
    exit 1
fi

echo ""
echo "Complete!"
