# Graphviz UML → SVG for Sphinx / ReadTheDocs.
#
# One committed format only (SVG). Optional local `make png` / `make pdf` are
# not part of `all` and are not committed.
#
#   make -C docs/source/diagrams/plantuml all

SHELL := /bin/bash
.PHONY: all svg pdf png clean help

SVG_OUTDIR := ../svg
PDF_OUTDIR := ../pdf
PNG_OUTDIR := ../png
DPI ?= 150

DOT ?= dot
RSVG ?= rsvg-convert

DOT_SOURCES := $(wildcard *.dot)

all: svg

svg: | $(SVG_OUTDIR)
	@set -euo pipefail; \
	for f in $(DOT_SOURCES); do \
	  base=$${f%.dot}; \
	  echo "dot svg: $$f"; \
	  "$(DOT)" -Tsvg -o "$(SVG_OUTDIR)/$$base.svg" "$$f"; \
	done

# Local preview / papers only — do not commit these outputs.
png: | $(PNG_OUTDIR)
	@set -euo pipefail; \
	for f in $(DOT_SOURCES); do \
	  base=$${f%.dot}; \
	  echo "dot png: $$f"; \
	  "$(DOT)" -Tpng -Gdpi=$(DPI) -o "$(PNG_OUTDIR)/$$base.png" "$$f"; \
	done

pdf: svg | $(PDF_OUTDIR)
	@set -euo pipefail; \
	command -v "$(RSVG)" >/dev/null || { echo "rsvg-convert required for PDF"; exit 1; }; \
	for f in $(DOT_SOURCES); do \
	  base=$${f%.dot}; \
	  echo "rsvg-convert pdf: $$base.svg"; \
	  "$(RSVG)" -f pdf -o "$(PDF_OUTDIR)/$$base.pdf" "$(SVG_OUTDIR)/$$base.svg"; \
	done

$(SVG_OUTDIR) $(PDF_OUTDIR) $(PNG_OUTDIR):
	mkdir -p $@

clean:
	@for f in $(DOT_SOURCES); do \
	  base=$${f%.dot}; \
	  rm -f "$(SVG_OUTDIR)/$$base.svg"; \
	done

help:
	@echo '  all / svg   committed Sphinx SVG (default)'
	@echo '  png         local raster preview (not committed)'
	@echo '  pdf         local paper PDF via rsvg-convert (not committed)'
	@echo ''
	@echo 'DOT engine: $(DOT)  (splines=ortho)'
	@echo 'Optional: python3 generate_diagrams.py'
