GO = go

DOWNLOAD = wget --quiet --output-document
UNZIP = unzip -d
MKDIR = mkdir -p


.PHONY: all
all: download-icons download-libs data build

.PHONY: clean
clean:
	$(RM) -r datetime data/cities*.json third-party/ assets/js/third-party/ templates/icon_*.svg


.PHONY: build
build: datetime

datetime: *.go data/*.go
	$(GO) build -tags "$(TAGS)" -v -o datetime

.PHONY: test
test: data
	$(GO) test -cover -bench=. -v ./...


DATASETS = \
	third-party/cities15000.txt \
	third-party/admin1CodesASCII.txt \
	third-party/countryInfo.txt

.PHONY: data
data: data/cities.json

data/cities.json: $(DATASETS) scripts/data.go data/*.go
	cd scripts && $(GO) run data.go

third-party/cities15000.txt:
	$(MKDIR) third-party/
	$(DOWNLOAD) third-party/cities15000.zip http://download.geonames.org/export/dump/cities15000.zip
	$(UNZIP) third-party/ third-party/cities15000.zip
	$(RM) third-party/cities15000.zip

third-party/countryInfo.txt:
	$(MKDIR) third-party/
	$(DOWNLOAD) third-party/countryInfo.txt http://download.geonames.org/export/dump/countryInfo.txt

third-party/admin1CodesASCII.txt:
	$(MKDIR) third-party/
	$(DOWNLOAD) third-party/admin1CodesASCII.txt https://download.geonames.org/export/dump/admin1CodesASCII.txt

.PHONY: download-libs
download-libs: assets/js/third-party/luxon.min.js

assets/js/third-party/luxon.min.js:
	$(MKDIR) assets/js/third-party/
	$(DOWNLOAD) assets/js/third-party/luxon.min.js https://cdn.jsdelivr.net/npm/luxon@1.25.0/build/global/luxon.min.js


ICONS = \
	solid_sun \
	solid_moon \
	solid_adjust \
	solid_trash \
	solid_plus

.PHONY: download-icons
download-icons: $(foreach icon,$(ICONS),templates/icon_$(icon).svg)

.DELETE_ON_ERROR: templates/icon_%.svg
templates/icon_%.svg:
	$(DOWNLOAD) $@ https://github.com/FortAwesome/Font-Awesome/raw/5.15.1/svgs/$(subst _,/,$*).svg
