#!/usr/bin/env bash
##############################################################################
# epuboptim – lossily compress JPGs in an EPUB’s OEBPS folder for tablets
#            (requires: unzip, zip, find, mogrify from ImageMagick)
#
# Usage:  epuboptim FILE.epub
# Result: FILE-optimized.epub alongside the original; temp dir is deleted.
##############################################################################

set -euo pipefail

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

EPUB="$1"
[[ -f "$EPUB" ]] || { echo "File not found: $EPUB" >&2; exit 1; }
[[ "${EPUB##*.}" == "epub" ]] || { echo "Input must be .epub" >&2; exit 1; }
OUTPATH="$(cd "$(dirname "$EPUB")" && pwd -P)/$(basename "$EPUB" .epub)-optimized.epub"
echo $EPUB $OUTPATH

WORKDIR=$(mktemp -d)
trap 'rm -rf "$WORKDIR"' EXIT
echo $WORKDIR

# 1. Unpack
unzip -q "$EPUB" -d "$WORKDIR"

# 2. Optimise JPEGs in OEBPS/ (tablet-friendly: max 1600 px, Q=80)
echo "Optimising images…"
find "$WORKDIR" -type f -iname '*.jpg' -print0 |
  xargs -0 mogrify -strip -resize '1600x>' -sampling-factor 4:2:0 -quality 80

# 3. Re-zip (mimetype first, uncompressed; rest max-deflate)
cd "$WORKDIR"
zip -X0 "$OUTPATH" mimetype >/dev/null
zip -Xr9 "$OUTPATH" . -x mimetype >/dev/null
