#!/bin/bash
#1.sh
#bash pdf.sh girdi.pdf ebook
#sudo apt install qpdf ghostscript
# PDF Parallel Compressor - 24 thread
# Kullanım: ./pdf_compress_24t.sh girdi.pdf [screen|ebook|printer]

INPUT="$1"
QUALITY="${2:-ebook}"   # varsayılan: ebook
THREADS=24
TMPDIR=$(mktemp -d /tmp/pdf_compress_XXXXX)
OUTPUT="${INPUT%.pdf}_compressed.pdf"

if [ -z "$INPUT" ] || [ ! -f "$INPUT" ]; then
    echo "Kullanım: $0 girdi.pdf [screen|ebook|printer]"
    exit 1
fi

echo "📄 Girdi: $INPUT"
echo "🎚️  Kalite: $QUALITY"
echo "🧵 Thread: $THREADS"
echo "📁 Tmp: $TMPDIR"
echo ""

# Toplam sayfa sayısı
TOTAL_PAGES=$(qpdf --show-npages "$INPUT")
echo "📖 Toplam sayfa: $TOTAL_PAGES"

# Sayfa başına thread hesapla
PAGES_PER_THREAD=$(( (TOTAL_PAGES + THREADS - 1) / THREADS ))
echo "📐 Thread başına ~$PAGES_PER_THREAD sayfa"
echo ""

# PDF'i parçalara böl
echo "✂️  PDF parçalanıyor..."
CHUNK_COUNT=0
for (( i=0; i<THREADS; i++ )); do
    START=$(( i * PAGES_PER_THREAD + 1 ))
    END=$(( (i + 1) * PAGES_PER_THREAD ))

    [ $START -gt $TOTAL_PAGES ] && break
    [ $END -gt $TOTAL_PAGES ] && END=$TOTAL_PAGES

    CHUNK_FILE="$TMPDIR/chunk_$(printf '%03d' $i).pdf"
    qpdf "$INPUT" --pages . "$START-$END" -- "$CHUNK_FILE" 2>/dev/null
    CHUNK_COUNT=$((CHUNK_COUNT + 1))
done
echo "✅ $CHUNK_COUNT parça oluşturuldu"
echo ""

# Paralel sıkıştırma
echo "🔥 Paralel sıkıştırma başlıyor ($THREADS thread)..."
PIDS=()

for CHUNK in "$TMPDIR"/chunk_*.pdf; do
    COMPRESSED="${CHUNK%.pdf}_compressed.pdf"
    gs -sDEVICE=pdfwrite \
       -dCompatibilityLevel=1.4 \
       -dPDFSETTINGS=/$QUALITY \
       -dNOPAUSE -dQUIET -dBATCH \
       -sOutputFile="$COMPRESSED" \
       "$CHUNK" &
    PIDS+=($!)
done

# Hepsini bekle + progress
DONE=0
TOTAL_PIDS=${#PIDS[@]}
for PID in "${PIDS[@]}"; do
    wait "$PID"
    DONE=$((DONE + 1))
    printf "\r⏳ İlerleme: %d/%d parça tamamlandı" $DONE $TOTAL_PIDS
done
echo ""
echo ""

# Parçaları birleştir
echo "🔗 Parçalar birleştiriliyor..."
COMPRESSED_FILES=()
for CHUNK in "$TMPDIR"/chunk_*_compressed.pdf; do
    COMPRESSED_FILES+=("$CHUNK")
done

# qpdf ile merge
qpdf --empty --pages "${COMPRESSED_FILES[@]}" -- "$OUTPUT"

# Temizlik
rm -rf "$TMPDIR"

# Sonuç
ORIG_SIZE=$(du -sh "$INPUT" | cut -f1)
NEW_SIZE=$(du -sh "$OUTPUT" | cut -f1)
ORIG_BYTES=$(stat -c%s "$INPUT")
NEW_BYTES=$(stat -c%s "$OUTPUT")
RATIO=$(( (ORIG_BYTES - NEW_BYTES) * 100 / ORIG_BYTES ))

echo "✅ Tamamlandı!"
echo "━━━━━━━━━━━━━━━━━━━━━━━━"
echo "📦 Önce:  $ORIG_SIZE"
echo "📦 Sonra: $NEW_SIZE"
echo "📉 Küçülme: %$RATIO"
echo "💾 Çıktı: $OUTPUT"
