mkfile_path := $(abspath $(lastword $(MAKEFILE_LIST)))
current_dir := $(notdir $(patsubst %/,%,$(dir $(mkfile_path))))

INSTALL = ../assets
SOURCES = .
VENDORS = vendors/bower_components

# Subdirectoris a copiar de vendors.
INSTALL_VENDORS = dropify/dist dropify/src/images

# Subdirectoris a copiar de SRCDIR a OUTDIR
COPYDIRS =

# Per comprovar el path de destí:
# make showvar-INSTALL_PATH
# Si no dona res es que està malament el path.
INSTALL_PATH = $(realpath $(INSTALL))
SOURCES_PATH = $(realpath $(SOURCES))

#COMPRESSOR = java -jar yuicompressor-2.4.6.jar
COMPRESSOR = yuicompressor
COMPRESSOR_FLAGS = --charset utf-8 --verbose

### uglify
# npm install uglify-js -g
# npm install uglifycss -g
UGLIFY = uglifyjs
#UGLIFY_FLAGS =  --compress --mangle --
UGLIFY_FLAGS =  --mangle --ie8 --
UGLIFYCSS = uglifycss
UGLIFY_FLAGS =

SASS = sass
#SASS_INCLUDE = -I ../node_modules -I ../bower_components
SASS_INCLUDE =
SASS_FLAGS = $(SASS_INCLUDE) --style compressed --sourcemap=auto

# Target dependant variables
#release: SASS_FLAGS = $(SASS_INCLUDE) --no-cache --style compressed --sourcemap=none
#debug: SASS_FLAGS = $(SASS_INCLUDE) --style expanded --sourcemap=auto

# Carpeta local on deixarem els fitxers finals.
SRCDIR = $(SOURCES)
OUTDIR = $(INSTALL)

MKDIR = mkdir -p

# Per buscar fitxers recursivament. e.g. SRC_JS := $(call rwildcard,$(SRCDIR)/js/,*.js)
# En teoria això es pot fet via $(wildcard $(SRCDIR)/js/**/*.js) però no sempre funciona...
# ATENCIÓ: NECESSITA UN SLASH FINAL AL NOM DEL DIRECTORI I NO POT
# HABER ESPAI ENTRE LA COMA DE DESPRES DEL DIRECTORI I L'EXTENSIÓ!!!!!
rwildcard=$(wildcard $1$2) $(foreach d,$(wildcard $1*),$(call rwildcard,$d/,$2))

### Fitxers css generat via SCSS
# Excloure els fitxers que comencen amb _
EXCLUDE_SCSS = $(call rwildcard,$(SRCDIR)/scss/,_*.scss)
SCSS_FILES = $(filter-out $(EXCLUDE_SCSS),$(call rwildcard, $(SRCDIR)/scss/,*.scss))
SCSS_BUILD := $(patsubst $(SRCDIR)/scss/%,$(OUTDIR)/css/%,$(SCSS_FILES:.scss=.css))
SCSS_INSTALL := $(patsubst $(SRCDIR)/scss/%,$(INSTALL)css/%,$(SCSS_FILES:.scss=.css))

### Fitxers css que no estan fets via SCSS
CSS_FILES = $(filter-out %-min.css,$(call rwildcard,$(SRCDIR)/css/,*.css))
CSS_BUILD := $(patsubst $(SRCDIR)/%,$(OUTDIR)/%,$(CSS_FILES))

### Fitxers js
# Excloure els fitxers que acaben amb _{EL QUE SIGUI}.js
EXCLUDE_JS = $(call rwildcard,$(SRCDIR)/js/,*_*.js)
JS_FILES = $(filter-out $(EXCLUDE_JS),$(call rwildcard,$(SRCDIR)/js/,*.js))
JS_BUILD := $(patsubst $(SRCDIR)/%,$(OUTDIR)/%,$(JS_FILES))

build: build-scss minify-css minify-js
all: clean sass minify-css minify-js
release: clean sass minify-css minify-js install
debug: sass copy-css copy-js

build-scss: $(SCSS_FILES) $(SCSS_BUILD)
minify-css: $(CSS_FILES) $(CSS_BUILD)
minify-js: $(JS_FILES) $(JS_BUILD)

# Aixó sols serveix per fitxers .scss de "primer nivell"...
# (falta la part que detectaria canvis en els @imports)
$(OUTDIR)/css/%.css: $(SRCDIR)/scss/%.scss
	@test -d $(@D) || $(MKDIR) $(@D)
	$(SASS) -I $(SRCDIR)/scss/ $(SASS_FLAGS) $< $@

$(OUTDIR)/%.css: $(SRCDIR)/%.css
	@test -d $(@D) || $(MKDIR) $(@D)
	$(UGLIFYCSS) $(UGLIFYCSS_FLAGS) $< >$@

$(OUTDIR)/%.js: $(SRCDIR)/%.js
	@test -d $(@D) || $(MKDIR) $(@D)
	$(UGLIFY) $(UGLIFY_FLAGS) $< >$@

sass:
	@if [ -d $(SRCDIR)/scss ]; then \
	    test -d $(INSTALL)css || $(MKDIR) $(INSTALL)css; \
	    echo '==> Compilant SASS'; \
	    sass --update $(SRCDIR)/scss:$(INSTALL)css/ $(SASS_FLAGS); \
	fi;

copy-css:
	@test -d $(INSTALL)css || $(MKDIR) $(INSTALL)css
	@echo '==> Copiant CSS'
	@for file in $(CSS_FILES); do \
	    cp $$file $(INSTALL)css; \
	done

copy-js:
	@test -d $(INSTALL)js || $(MKDIR) $(INSTALL)js
	@echo '==> Copiant JS'
	@for file in $(JS_FILES); do \
	    cp $$file $(INSTALL)js; \
	done

# Install: packer -S inotify-tools
# Si dona error el make:
#   echo fs.inotify.max_user_watches=524288 | sudo tee -a /etc/sysctl.conf && sudo sysctl -p
watch:
	@while true; do \
	    make; \
	    inotifywait -qre close_write $(SRCDIR); \
	done

# Copiar directoris addicionals al directori destí. Son els definits a COPYDIRS (img, fonts, etz...)
copy: $(COPYDIRS)
$(COPYDIRS):
	@test -d $(INSTALL) || $(MKDIR) $(INSTALL)
	@echo '==> Copiant $@ '
	rsync -rupE $(SRCDIR)/$@ $(INSTALL)

# Copiem els fitxers que estan al directori css (que no son els generats via scss...)
# També els declarats a INSTALL_VENDORS
install: all copy
	@test -d $(INSTALL) || $(MKDIR) $(INSTALL)
	@for vendor in $(INSTALL_VENDORS); do \
	    if [ -d $(VENDORS)/$$vendor ]; then \
		if [ ! -d $(INSTALL)/$${vendor%%/*} ]; then \
		    mkdir -p $(INSTALL)/$${vendor%%/*}; \
		fi; \
		cp -r $(VENDORS)/$$vendor/. $(INSTALL)/$${vendor%%/*}; \
	    fi; \
	done

clean:
	@for file in $(SCSS_INSTALL); do \
	    if [ -a $$file ]; then \
		rm $$file; \
	    fi; \
	    if [ -a $$file.map ]; then \
		rm $$file.map; \
	    fi; \
	done
	@for file in $(CSS_BUILD); do \
	    if [ -a $$file ]; then \
		rm $$file; \
	    fi; \
	done
	@for file in $(JS_BUILD); do \
	    if [ -a $$file ]; then \
		rm $$file; \
	    fi; \
	done

distclean: clean
	# Eliminar RECURSIVAMENT!!!
	rm -rf $(addprefix $(INSTALL), $(COPYDIRS))
	# Eliminar sols si està buit
	rmdir --ignore-fail-on-non-empty $(INSTALL)css
	rmdir --ignore-fail-on-non-empty $(INSTALL)js

# Per mostrar el contigut de qualsevol variable.
# eg: make showvar-CSS_FILES
showvar-%:
	@echo '$*=$($*)'

.PHONY : sass all release debug install copy $(COPYDIRS) clean distclean
