ELM_FILES := $(shell find src -iname *.elm)
DOCKER_IMG :=elm-env
DOCKER_CMD := docker run --rm -t -v $(PWD):/app -w /app $(DOCKER_IMG)
# macOS requires mktemp template to be at the end of the filename.
TEMPFILE := $(shell mktemp ./elm-XXXXXXXXXX)
# --output flag for elm make must end in .js or .html.
TEMPFILE_JS := "$(TEMPFILE).js"

ifeq ($(NO_DOCKER), true)
  DOCKER_CMD=
endif

all: test script.js

elm-env:
	@(if [ "$(NO_DOCKER)" != "true" ] ; then \
		echo ">> building elm-env docker image"; \
		docker build -t $(DOCKER_IMG) ../. > /dev/null; \
	fi; )

format: elm-env $(ELM_FILES)
	@echo ">> format front-end code"
	@$(DOCKER_CMD) elm-format --yes $(ELM_FILES)

test: elm-env
	@$(DOCKER_CMD) elm-format $(ELM_FILES) --validate
	@$(DOCKER_CMD) elm-test

dev-server:
	elm-reactor

script.js: elm-env format $(ELM_FILES)
	@echo ">> building script.js"
	@$(DOCKER_CMD) elm make src/Main.elm --yes --output $(TEMPFILE_JS)
	@$(DOCKER_CMD) uglifyjs $(TEMPFILE_JS) --compress unused --mangle --output $(@)
	@rm -rf $(TEMPFILE_JS)
	@rm -rf $(TEMPFILE)

clean:
	- @rm script.js
	- @docker rmi $(DOCKER_IMG)
