CSS_FILES=main.css
SCSS_FILES=${CSS_FILES:%.css=%.scss} _fonts.scss
TPL_DETAILS=src/templateDetails.xml
PREFIX_TARBALL=reifenscheune

RSYNC_HOST=hh.wolf-stuttgart.net
RSYNC_USER=christian
RSYNC_BASE_PATH=/srv/http/vhosts/joomla.christian-wolf.click/updates/tpl_reifenscheune
RSYNC_BASE=$(RSYNC_USER)@$(RSYNC_HOST):$(RSYNC_BASE_PATH)

PUBLIC_URL_BASE=https://joomla.christian-wolf.click/updates/tpl_reifenscheune

define FUNCTION_BUMP_FILE =
	tmp=$$(mktemp) && \
	echo $$(( $$(cat $(1) ) + 1 )) > $$tmp && \
	mv $$tmp $(1)
endef

FUNCTION_VERSION=$$(cat build/major).$$(cat build/minor).$$(cat build/patch)

.PHONY: all
all: tarball

.PHONY: css
css:
	npm run scss

.PHONY: watch_css
watch_css:
	npm run scss:watch

.PHONY: bump_patch bump_minor bump_major
bump_patch:
	$(call FUNCTION_BUMP_FILE,build/patch)
	git add build/patch
	git commit -m 'Bump patch version'
	$(MAKE) git-version
	$(MAKE) $(TPL_DETAILS)

bump_minor:
	echo 0 > build/patch
	$(call FUNCTION_BUMP_FILE,build/minor)
	git add build/patch build/minor
	git commit -m 'Bump minor version'
	$(MAKE) git-version
	$(MAKE) $(TPL_DETAILS)

bump_major:
	echo 0 > build/patch
	echo 0 > build/minor
	$(call FUNCTION_BUMP_FILE,build/major)
	git add build/patch build/minor build/major
	git commit -m 'Bump major version'
	$(MAKE) git-version
	$(MAKE) $(TPL_DETAILS)

.PHONY: $(TPL_DETAILS)
$(TPL_DETAILS):
	VERSION=$(call FUNCTION_VERSION) && \
	DATE=$$(date +%Y-%m-%d) && \
	sed "s@%DATE%@$$DATE@g;s@%VERSION%@$$VERSION@g" templateDetails.xml.dist > $@

.PHONY: git-version
git-version:
	git tag v$(call FUNCTION_VERSION)

.PHONY: tarball
tarball: $(TPL_DETAILS) css
	tar czf tarball.tar.gz -C src --exclude .gitignore .
	mkdir -p res/tarballs
	mv tarball.tar.gz res/tarballs/$(PREFIX_TARBALL)-$(call FUNCTION_VERSION).tar.gz

.PHONY: fetch_xml_parts
fetch_xml_parts:
	mkdir -p res/xml
	rsync -ptr $(RSYNC_BASE)/xml/ res/xml

.PHONY: create_xml_part
create_xml_part:
	mkdir -p res/xml
	VERSION=$(call FUNCTION_VERSION) && \
	URL=$(PUBLIC_URL_BASE)/res/$(PREFIX_TARBALL)-$$VERSION.tar.gz && \
	SHA256=$$(sha256sum res/tarballs/$(PREFIX_TARBALL)-$$VERSION.tar.gz | awk '{print $$1}') && \
	SHA384=$$(sha384sum res/tarballs/$(PREFIX_TARBALL)-$$VERSION.tar.gz | awk '{print $$1}') && \
	SHA512=$$(sha512sum res/tarballs/$(PREFIX_TARBALL)-$$VERSION.tar.gz | awk '{print $$1}') && \
	sed "s@%VERSION%@$$VERSION@g;s@%URL%@$$URL@g;s@%SHA256%@$$SHA256@g;s@%SHA384%@$$SHA384@g;s@%SHA512%@$$SHA512@g" update.xml.dist > res/xml/part-$$VERSION.xml

.PHONY: push push-force push-git
push:
	$(MAKE) prepare_push
	$(MAKE) check_existing_release
	$(MAKE) create_updates
	$(MAKE) do_push

push-force:
	$(MAKE) prepare_push
	$(MAKE) create_updates
	$(MAKE) do_push
	

push-git:
	git push --tags
	git push

.PHONY: prepare_push check_existing_release create_updates do_push

prepare_push:
	$(MAKE) fetch_xml_parts
	$(MAKE) create_xml_part

check_existing_release:
	LINES=$$(rsync -nCrv --existing res/tarballs/ $(RSYNC_BASE)/res | wc -l) && \
	if [ $$LINES -gt 4 ]; then \
		rsync -nCrv --existing res/tarballs/ $(RSYNC_BASE)/res ; \
		echo -e 'Error:\nYou are overwriting an existing release. Please check manually and remove on server if this is intended.' >&2; \
		exit 1; \
	fi

create_updates:
	cat updates.xml.prefix res/xml/*.xml updates.xml.postfix > res/updates.xml

do_push:
	rsync -ptrl res/tarballs/ $(RSYNC_BASE)/res
	rsync -ptrl res/xml/ $(RSYNC_BASE)/xml/
	rsync -pt res/updates.xml $(RSYNC_BASE)/updates.xml
	
	@echo
	@echo Do not forget to commit the state to git and make a tag!
	@echo

.PHONY: help
help:
	@echo
	@echo See file README.md for valid targets
	@echo