#!/usr/bin/env bash
###############################################################################
# pdfoptim – compress & linearize PDFs for tablet viewing
#   uses Ghostscript + QPDF
# Requirements: gs, qpdf
#
# Usage:  pdfoptim /path/to/file.pdf
# Output: /path/to/file-optimized.pdf
###############################################################################

set -euo pipefail

if [[ $# -ne 1 ]]; then
  echo "Usage: $(basename "$0") <file.pdf>" >&2
  exit 1
fi

PDF="$1"
# sanity checks
[[ -f "$PDF" ]] || { echo "Error: File not found: $PDF" >&2; exit 1; }
[[ "${PDF##*.}" =~ ^([pP][dD][fF])$ ]] || { echo "Error: Input must be a .pdf" >&2; exit 1; }

# compute absolute paths
DIR="$(cd "$(dirname "$PDF")" && pwd -P)"
BASE="$(basename "$PDF" .pdf)"
OUT="${DIR}/${BASE}-optimized.pdf"

# temp working dir
WORKDIR="$(mktemp -d)"
trap 'rm -rf "$WORKDIR"' EXIT

echo "→ Compressing via Ghostscript (PDFSETTINGS=/ebook)…"
gs -sDEVICE=pdfwrite \
   -dCompatibilityLevel=1.4 \
   -dPDFSETTINGS=/ebook \
   -dNOPAUSE -dQUIET -dBATCH \
   -sOutputFile="$WORKDIR/${BASE}-gs.pdf" \
   "$PDF"

echo "→ Linearizing with QPDF for fast open…"
qpdf --linearize \
      "$WORKDIR/${BASE}-gs.pdf" \
      "$WORKDIR/${BASE}-lin.pdf"

echo "→ Writing final file: $OUT"
mv "$WORKDIR/${BASE}-lin.pdf" "$OUT"

echo "✔ Done: $OUT"
