.PHONY: clean-slides
clean-slides:
	rm -fr $(BUILD_SLIDES_DIR) # remove generated PDF slides

.PHONY: clean
clean: clean-slides

.PHONY: watch-slides-internal
watch-slides-internal: .marp/theme.css
	PORT=$(SLIDES_PORT) \
		 npx marp \
		 --allow-local-files \
		 --engine $$(pwd)/.marp/engine.js \
		 --html \
		 --theme $$(pwd)/.marp/theme.css \
		 -w $(SLIDES_DIR) \
		 -s
	 # --theme-set glenux

.PHONY: watch-slides serve-slides
watch-slides: ## run development server for PDF slides
	pipenv run honcho start watch-slides src-autoslide

.PHONY: prepare 
prepare: prepare-slides

.PHONY: prepare-slides
prepare-slides: ## install prerequisites for PDF slides only
	npm install
	npm rebuild node-sass
	npx browserslist@latest --update-db


$(BUILD_SLIDES_DIR)/%.pdf: $(CACHE_SLIDES_DIR)/%.mdpp.md | $(BUILD_SLIDES_DIR) .marp/theme.css
	npx marp --allow-local-files \
	 	 --engine $$(pwd)/.marp/engine.js \
	 	 --html \
	 	 --theme $$(pwd)/.marp/theme.css \
	 	 $< \
	 	 -o $@

$(BUILD_SLIDES_DIR)/%.pdf: $(SLIDES_DIR)/%.md | $(BUILD_SLIDES_DIR) .marp/theme.css
	npx marp --allow-local-files \
	 	 --engine $$(pwd)/.marp/engine.js \
	 	 --html \
	 	 --theme $$(pwd)/.marp/theme.css \
	 	 $< \
	 	 -o $@

$(BUILD_SLIDES_DIR)/%.pptx: $(SLIDES_DIR)/%.md | $(BUILD_SLIDES_DIR) .marp/theme.css
	npx marp --allow-local-files \
	 	 --engine $$(pwd)/.marp/engine.js \
	 	 --html \
	 	 --theme $$(pwd)/.marp/theme.css \
	 	 $< \
	 	 -o $@

.marp/theme.css:
	cd .marp && $(MAKE) theme.css

$(BUILD_SLIDES_DIR):
	mkdir -p $(BUILD_SLIDES_DIR)

.PHONY: build-slides
build-slides: build-slides-pdf build-slides-html  ## build only slides as PDF and HTML

.PHONY: build-slides-pptx
build-slides-pptx: $(SLIDES_PPTX_ALL) $(SLIDES_MD_ALL)  ## build PPTX slides only

.PHONY: build-slides-pdf
build-slides-pdf: $(SLIDES_PDF_ALL) $(SLIDES_MD_ALL)  ## build PDF slides only

.PHONY: build-slides-html
build-slides-html: $(SLIDES_HTML_ALL)  ## build HTML slides only

.PHONY: merge-slides
merge-slides: $(SLIDES_MDPP_MD) $(SLIDES_MD_ALL)

.PHONY: watch-slides
serve-slides: watch-slides

.PHONY: autoslide
autoslide: $(SLIDES_DIR)/autoslide.md | $(BUILD_SLIDES_DIR)

$(SLIDES_DIR)/autoslide.md: $(DOCS_MD)
	find -L $(DOCS_DIR) -regextype sed \( -regex '.*/[0-9][^/]*\.md' ! -regex '.*/_.*' \) -print0 \
		| sort -z \
		| xargs -0 sed '/^---$$/,/^---$$/d' \
		> $(SLIDES_DIR)/autoslide.md

.PHONY: watch-autoslide-internal
watch-autoslide-internal:
	# FIXME: use watchexec instead
	while inotifywait -q -e move -e modify -e create -e attrib -e delete -e moved_to -r $(DOCS_DIR) ; do \
		sleep 0.25 ; \
		$(MAKE) autoslide ; \
	done

.PHONY: watch-tocupdate-internal
watch-tocupdate-internal:
	# FIXME: use watchexec instead
	while inotifywait -q -e move -e modify -e create -e attrib -e delete -e moved_to -r $(DOCS_DIR) ; do \
		sleep 2 ; \
		$(MAKE) images ; \
	done

.PHONY: build-slides-pdf
build-pdf: build-slides-pdf  ## build slides as PDF files

.PHONY: build-slides-html
build-html: build-slides-html  ## build slides as HTML files

.PHONY: build-slides-pptx
build-pptx: build-slides-pptx  ## build slides as PPTX files