# Makefile for Marp Slides Project

.PHONY: help build dev watch pdf html clean install deploy deploy-html copy-assets optimize-images

# Directories
SLIDES_DIR = slides
BUILD_DIR = build

# Termin files (date-topic naming convention) - each is self-contained
TERMIN_1 = 2025-12-20-termin-1-geschichte-grundlagen-html
TERMIN_2 = 2026-01-10-termin-2-netzwerke-protokolle-css
TERMIN_3 = 2026-01-24-termin-3-interaktivitaet-javascript
TERMINS = $(TERMIN_1) $(TERMIN_2) $(TERMIN_3)

# 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 "  Deploy:"
	@echo "    make deploy     - Full build + deploy (HTML, PDF, assets)"
	@echo "    make deploy-html - HTML only deploy (faster)"
	@echo ""
	@echo "  Other:"
	@echo "    make optimize-images - Resize images to max 1920px"
	@echo "    make clean      - Remove generated files"
	@echo "    make install    - Install dependencies"

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

# Copy assets and materials to build directory
copy-assets: $(BUILD_DIR)/.exists
	@echo "Copying assets..."
	@cp -r $(SLIDES_DIR)/assets $(BUILD_DIR)/
	@cp -r $(SLIDES_DIR)/materials $(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:
	npx @marp-team/marp-cli --watch $(SLIDES_DIR)/

# Build all slides (HTML + PDF)
build: copy-assets
	@echo "Building all slides..."
	@for f in $(TERMINS); do \
		echo "Building $$f..."; \
		npx @marp-team/marp-cli $(SLIDES_DIR)/$$f.md -o $(BUILD_DIR)/$$f.html; \
		npx @marp-team/marp-cli $(SLIDES_DIR)/$$f.md --pdf --allow-local-files -o $(BUILD_DIR)/$$f.pdf; \
	done
	@./scripts/generate-index.sh $(BUILD_DIR)
	@echo "Done! Output in $(BUILD_DIR)/"

# Export all slides to PDF
pdf: $(BUILD_DIR)/.exists
	@echo "Exporting to PDF..."
	@for f in $(TERMINS); do \
		echo "  $$f.pdf"; \
		npx @marp-team/marp-cli $(SLIDES_DIR)/$$f.md --pdf --allow-local-files -o $(BUILD_DIR)/$$f.pdf; \
	done
	@echo "Done! PDFs in $(BUILD_DIR)/"

# Export all slides to HTML
html: copy-assets
	@echo "Exporting to HTML..."
	@for f in $(TERMINS); do \
		echo "  $$f.html"; \
		npx @marp-team/marp-cli $(SLIDES_DIR)/$$f.md -o $(BUILD_DIR)/$$f.html; \
	done
	@./scripts/generate-index.sh $(BUILD_DIR)
	@echo "Done! HTML files in $(BUILD_DIR)/"

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

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

# Optimize images (resize to max 1920px, requires nix-shell -p imagemagick)
optimize-images:
	@echo "Backing up originals to assets-original/..."
	@mkdir -p $(SLIDES_DIR)/assets-original
	@cp $(SLIDES_DIR)/assets/*.png $(SLIDES_DIR)/assets-original/ 2>/dev/null || true
	@cp $(SLIDES_DIR)/assets/*.jpg $(SLIDES_DIR)/assets-original/ 2>/dev/null || true
	@echo "Resizing images to max 1920px..."
	@nix-shell -p imagemagick --run 'for img in $(SLIDES_DIR)/assets/*.png; do magick "$$img" -resize "1920x>" -quality 85 "$$img"; done'
	@nix-shell -p imagemagick --run 'for img in $(SLIDES_DIR)/assets/*.jpg; do magick "$$img" -resize "1920x>" -quality 85 "$$img"; done'
	@echo "Done! Originals backed up in assets-original/"

# Deploy slides (full build)
deploy: build
	@echo "Deploying slides..."
	@echo "Copying HTML files..."
	scp $(BUILD_DIR)/*.html tengo@tuttle.uberspace.de:/home/tengo/html/hdm/223015c/
	@echo "Copying assets..."
	scp -r $(BUILD_DIR)/assets/ tengo@tuttle.uberspace.de:/home/tengo/html/hdm/223015c/
	@echo "Copying materials..."
	scp -r $(BUILD_DIR)/materials/ tengo@tuttle.uberspace.de:/home/tengo/html/hdm/223015c/ 2>/dev/null || true

# Deploy HTML only (faster, no PDF rebuild)
deploy-html: html
	@echo "Deploying HTML only..."
	scp $(BUILD_DIR)/*.html tengo@tuttle.uberspace.de:/home/tengo/html/hdm/223015c/
	scp -r $(BUILD_DIR)/assets/ tengo@tuttle.uberspace.de:/home/tengo/html/hdm/223015c/
	scp -r $(BUILD_DIR)/materials/ tengo@tuttle.uberspace.de:/home/tengo/html/hdm/223015c/ 2>/dev/null || true
