# Makefile for Marp Slides Project

.PHONY: help build dev watch pdf html clean install deploy assemble

# Slide components
SLIDES_DIR = slides
BUILD_DIR = build
HEADER = $(SLIDES_DIR)/_frontmatter.md
INTRO = $(SLIDES_DIR)/_intro.md
OUTRO = $(SLIDES_DIR)/_outro.md

# Termin files (date-topic naming convention)
TERMIN_1 = 2025-12-19-termin-1-grundlagen-text-audio
TERMIN_2 = 2026-01-09-termin-2-bild-audio-video
TERMIN_3 = 2026-01-23-termin-3-speichermedien-schnittstellen
TERMIN_4 = 2026-01-30-termin-4-distribution-apis-zukunft
TERMIN_5 = 2026-xx-xx-termin-5-vertiefung-offene-fragen
TERMINS = $(TERMIN_1) $(TERMIN_2) $(TERMIN_3) $(TERMIN_4) $(TERMIN_5)

# Default target
help:
	@echo "Available commands:"
	@echo ""
	@echo "  Development:"
	@echo "    make dev        - Start dev server (browse all files at localhost:1312)"
	@echo ""
	@echo "  Build:"
	@echo "    make build      - Build all slides (HTML + PDF)"
	@echo "    make pdf        - Export all slides to PDF"
	@echo "    make html       - Export all slides to HTML"
	@echo ""
	@echo "  Other:"
	@echo "    make assemble   - Assemble all termin files in build/"
	@echo "    make clean      - Remove generated files"
	@echo "    make install    - Install dependencies"
	@echo "    make deploy     - Deploy slides to server"

# Ensure build directory exists
$(BUILD_DIR)/.exists:
	@mkdir -p $(BUILD_DIR)
	@touch $@

# Assemble all termin files
assemble: $(BUILD_DIR)/.exists
	@echo "Assembling slides..."
	@for f in $(TERMINS); do \
		echo "  $$f.md"; \
		cat $(HEADER) $(INTRO) $(SLIDES_DIR)/$$f.md $(OUTRO) > $(BUILD_DIR)/$$f.md; \
	done
	@echo "  all.md"
	@cat $(HEADER) $(INTRO) $(foreach t,$(TERMINS),$(SLIDES_DIR)/$(t).md) $(OUTRO) > $(BUILD_DIR)/all.md
	@cp -r $(SLIDES_DIR)/assets $(BUILD_DIR)/ 2>/dev/null || true

# Development server - serves slides/ directly with HMR
dev:
	@echo "Starting dev server with HMR..."
	@echo "Open: http://localhost:1312"
	PORT=1312 npx @marp-team/marp-cli --server $(SLIDES_DIR)/

# Watch for changes
watch: assemble
	npx @marp-team/marp-cli --watch $(BUILD_DIR)/all.md

# Build all slides (HTML + PDF)
build: assemble
	@echo "Building all slides..."
	@for f in $(TERMINS); do \
		echo "Building $$f..."; \
		npx @marp-team/marp-cli $(BUILD_DIR)/$$f.md -o $(BUILD_DIR)/$$f.html; \
		npx @marp-team/marp-cli $(BUILD_DIR)/$$f.md --pdf --allow-local-files -o $(BUILD_DIR)/$$f.pdf; \
	done
	@echo "Building all.md..."
	npx @marp-team/marp-cli $(BUILD_DIR)/all.md -o $(BUILD_DIR)/all.html
	npx @marp-team/marp-cli $(BUILD_DIR)/all.md --pdf --allow-local-files -o $(BUILD_DIR)/all.pdf

# Export to PDF (all slides combined)
pdf: assemble
	@echo "Exporting to PDF..."
	npx @marp-team/marp-cli $(BUILD_DIR)/all.md --pdf --allow-local-files -o $(BUILD_DIR)/all.pdf

# Export to HTML (all slides combined)
html: assemble
	@echo "Exporting to HTML..."
	npx @marp-team/marp-cli $(BUILD_DIR)/all.md -o $(BUILD_DIR)/all.html

# Clean generated files
clean:
	@echo "Cleaning generated files..."
	rm -rf $(BUILD_DIR)/ *.pdf *.html

# Install dependencies
install:
	@echo "Installing dependencies..."
	npm install

# Deploy slides
deploy: build
	@echo "Deploying slides..."
	scp $(BUILD_DIR)/all.html tengo@tuttle.uberspace.de:/home/tengo/html/malta/index.html
	scp -r $(BUILD_DIR)/assets/ tengo@tuttle.uberspace.de:/home/tengo/html/malta/
