# Licensed to the Apache Software Foundation (ASF) under one or more
# contributor license agreements.  See the NOTICE file distributed with
# this work for additional information regarding copyright ownership.
# The ASF licenses this file to You under the Apache License, Version 2.0
# (the "License"); you may not use this file except in compliance with
# the License.  You may obtain a copy of the License at
#
#     http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing, software
# distributed under the License is distributed on an "AS IS" BASIS,
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
# See the License for the specific language governing permissions and
# limitations under the License.

# ________________________________________________________ 
#  _________/\\\___________________________________________
#   ________\/\\\___________________________________________
#    ________\/\\\___________________________________________
#     ________\/\\\______/\\\\\________/\\\\\\\\__/\\\\\\\\\\_
#      ___/\\\\\\\\\____/\\\///\\\____/\\\//////__\/\\\//////__
#       __/\\\////\\\___/\\\__\//\\\__/\\\_________\/\\\\\\\\\\_
#        _\/\\\__\/\\\__\//\\\__/\\\__\//\\\________\////////\\\_
#         _\//\\\\\\\/\\__\///\\\\\/____\///\\\\\\\\__/\\\\\\\\\\_
#          __\///////\//_____\/////________\////////__\//////////__
#           ________________________________________________________
# 
# 

BUILDDIR     = _build
DOCKER_GROUP = $(or $(shell printenv DOCKER_GROUP), $(GID), 1000)
DOCKER_USER  = $(or $(shell printenv DOCKER_USER), $(UID), 1000)
DOCS_FILES   = $(shell find . -name \*.rst -print)
SOURCEDIR    = docs
SPHINXBUILD  = sphinx-build
SPHINXOPTS   = -W
SPHINXPROJ   = Stateful Functions


# Target called by netlify, does some setup tasks specific to netlify
.PHONY: multiversion
multiversion:
	sphinx-versioning build "$(SOURCEDIR)" "$(BUILDDIR)/html"

# Target for building the docs on netlify
.PHONY: netlify
netlify:
	./netlify-build.sh

# Run sphinx-autobuild to watch and rebuild the docs on changes
.PHONY: autobuild
autobuild:
	sphinx-autobuild \
	  --host 0.0.0.0 \
	  --port 8000 \
	  --ignore "*.sw?" \
	  --ignore "*.sw??" \
	  --ignore "*~" \
	  "$(SOURCEDIR)" \
	  "$(BUILDDIR)/html" \
	  $(SPHINXOPTS) \
	  $(0)

.PHONY: latexpdf
latexpdf:
	sphinx-build \
	  -M latexpdf \
	  "$(SOURCEDIR)" \
	  "$(BUILDDIR)/pdf" \
	  $(SPHINXOPTS) \
	  $(0)

# Build the base docker image for the docker-% target to use
.PHONY: docker
docker:
	docker build -t stateful-functions-docs-builder .

# Run other make targets in docker... obviously don't call another docker target
.PHONY: docker-%
docker-%: docker
	docker \
	  run \
	  --rm \
	  -it \
	  -v $(PWD):/build \
	  --user $(DOCKER_USER):$(DOCKER_GROUP) \
	  -p 8000:8000 \
	  stateful-functions-docs-builder \
	  make -C /build $*

# Run sphinx-autobuild in a docker container, much nicer than running locally
.PHONY: auto
auto: docker-autobuild

.PHONY: html
html:
	@$(SPHINXBUILD) -M html "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)

# Legacy build hosted in a docker container, then deployed to kubernetes
.PHONY: dist
dist: docker-html
	rsync -a _build/html dist/
	make -C dist

# Remove/clean the build directory
.PHONY: clean
clean:
	rm -rf "$(BUILDDIR)"

build-linter: Dockerfile-linter
	docker build -f Dockerfile-linter -t stateful-functions/stateful-functions-docs-linter .
	touch $@

.PHONY: docker-linter
docker-linter: build-linter
	docker \
	  run \
	  --rm \
	  -it \
	  --name docker-linter \
	  -v ${PWD}:/run/docs \
	  -w /run/docs \
	  stateful-functions/stateful-functions-docs-linter:latest \
	  $(LINTER) $(or $(LINTER_TARGET), $(DOCS_FILES))

.PHONY: linter-alex
linter-alex:
	make docker-linter LINTER=alex

.PHONY: linter-mdspell
linter-mdspell:
	make docker-linter LINTER="mdspell --en-us --ignore-numbers --ignore-acronyms --report"

.PHONY: linter-proselint
linter-proselint:
	make docker-linter LINTER=proselint

.PHONY: linter-retext-mapbox-standard
linter-retext-mapbox-standard:
	make docker-linter LINTER=retext-mapbox-standard

.PHONY: linter-write-good
linter-write-good:
	make docker-linter LINTER=write-good

.PHONY: lint
lint:
	make linter-write-good || true
	make linter-retext-mapbox-standard || true
	make linter-alex || true
	make linter-proselint || true

# This recreates the netlify build environment for local testing and troubleshooting.
#  If you're really stumped, try running it with BUILD_ARGS=/bin/bash to get a shell
#  and look around the filesystem to see whats up.
.PHONY: netlify-build-local
netlify-build-local:
	@mkdir -p _build
	@chmod g+w _build
	docker \
	  run \
	  --rm \
	  -it \
	  -v $(PWD):/opt/buildhome/local_repo \
	  -e NETLIFY_REPO_URL=/opt/buildhome/local_repo \
	  --user buildbot:$(DOCKER_GROUP) \
	  netlify/build \
	  build $(or $(BUILD_ARGS), ./netlify-build-local.sh)
