DIST_DIR := www

SCRIPT_SRC := $(wildcard src/scripts/*.js)

SCRIPT_DEST := $(SCRIPT_SRC:src/%=$(DIST_DIR)/%)

default: build

clean:
	git clean -fXd -e !src/config.pug

install: node_modules copy_lib copy_samples submodules

submodules:
	git submodule init
	git submodule update --recursive --remote

build: $(DIST_DIR)/index.html $(DIST_DIR)/styles/index.css $(SCRIPT_DEST)

watch:
	@echo 'watching for change'
	@echo 'press Ctrl+C to stop'
	@while true; do \
		$(MAKE) --silent build; \
		sleep 0.5; \
	done

serve:
	node server

# npm
node_modules:
	npm install

# vendor lib
copy_lib:
	@node copy_lib.js

# samples
copy_samples: src/config.json

src/config.json:
	@cp -n src/config.sample.json src/config.json

# pug
$(DIST_DIR)/index.html: src/index.pug src/config.json $(wildcard src/*.pug src/*/*.pug)
	@echo pug: $< ➜ $@
	
	@export ENV="dev"; \
	node_modules/.bin/pug --pretty $< --out $(dir $@) -O src/config.json || touch $@

# pug (prod)
$(DIST_DIR)/index.prod.html: src/index.pug src/config.json $(wildcard src/*.pug src/*/*.pug)
	@echo pug: $< ➜ $@
	
	@export ENV="prod"; \
	node_modules/.bin/pug --pretty $< --out $(dir $@) -E prod.html -O src/config.json || touch $@

# sass
$(DIST_DIR)/styles/index.css: src/styles/index.scss $(wildcard src/*.scss src/*/*.scss)
	@echo sass: $< ➜ $@
	@node_modules/.bin/node-sass $< $@ --source-map true --source-map-contents || touch $@ 

# babel
$(DIST_DIR)/%.js: src/%.js .babelrc
	@echo babel: $< ➜ $@
	@mkdir -p $(dir $@)
	@node_modules/.bin/babel $< --out-file $@ --source-maps || touch $@

buildprod: build
	$(MAKE) $(DIST_DIR)/index.prod.html

deploy: pull install build

pull:
	git pull

sync: buildprod
	rsync -rv www/* staging-app@ssh-staging-app.happy-dev.fr:~/staging-app.happy-dev.fr/ --exclude=www/index.html --exclude=www/index.prod.html
	rsync --no-R --no-implied-dirs www/index.prod.html staging-app@ssh-staging-app.happy-dev.fr:~/staging-app.happy-dev.fr/index.html
	rsync -v www/.htaccess staging-app@ssh-staging-app.happy-dev.fr:~/staging-app.happy-dev.fr/

.PHONY: default install submodules copy_lib copy_samples build watch serve clean sync buildprod pull deploy