.DEFAULT_GOAL:=build

TEMP_DIR=$(shell ./preflight)
DIST_DIR=${TEMP_DIR}/dist
DOT_ENV_FILE=${TEMP_DIR}/.env
DOT_ENV_PAIRS=$(shell cat ${DOT_ENV_FILE})
BUILD_ARGS=$(shell for ARG in ${DOT_ENV_PAIRS}; do echo "--build-arg $$ARG"; done;)

-include ${DOT_ENV_FILE}

vault/encrypt:
	@echo "### Encrypting secrets..."
	@./vault encrypt
	@echo "### Encrypting done"

vault/decrypt:
	@echo "### Decrypting secrets..."
	@./vault decrypt
	@echo "### Decrypting done"

init:
	@echo "### Init..."
	@./require ${DOT_ENV_FILE} alpine_source
	@./require ${DOT_ENV_FILE} tailspin_bin
	@echo "### Init done"
	@make vault/decrypt

build: repository
	@echo "### Assembling..."
	@rsync -chaz ${CACHE_DIR}/${RELEASE_BASENAME}/ ${DIST_DIR}
	@mkdir -p ${TEMP_DIR}/overlay_headless/etc/local.d
	@mkdir -p ${TEMP_DIR}/overlay_headless/etc/runlevels/default
	@touch ${TEMP_DIR}/overlay_headless/etc/.default_boot_services
	-@ln -s /etc/init.d/local ${TEMP_DIR}/overlay_headless/etc/runlevels/default/local
	@./src/esh -o ${TEMP_DIR}/overlay_headless/etc/local.d/headless.start src/headless.start ${DOT_ENV_PAIRS}
	@chmod +x ${TEMP_DIR}/overlay_headless/etc/local.d/headless.start
	@tar czf ${DIST_DIR}/headless.apkovl.tar.gz -C ${TEMP_DIR}/overlay_headless/ .
	@rsync -chaz ${CACHE_DIR}/aport/${RELEASE_VERSION}/main/ ${DIST_DIR}/extras
	@cp ${CACHE_DIR}/tailspin/tspin ${DIST_DIR}
	@./src/esh -o ${DIST_DIR}/hotspot.conf src/hotspot.conf ${DOT_ENV_PAIRS}
	@./src/esh -o ${DIST_DIR}/wg0.conf src/wg0.conf ${DOT_ENV_PAIRS}
	@cp secrets/*.psk ${DIST_DIR}
	@cp secrets/authorized_keys ${DIST_DIR}
	@cp src/config.toml ${DIST_DIR}
	@cp src/logpattern.conf ${DIST_DIR}
	@cp src/main.conf ${DIST_DIR}
	@cp src/rsyslog.conf ${DIST_DIR}
	@cp src/usercfg.txt ${DIST_DIR}
	@cp src/watchdog.sh ${DIST_DIR}
	@cp secrets/packager.rsa.pub ${DIST_DIR}
	@cp src/repository-builder/${REQUIREMENTS_FILE} ${DIST_DIR}
	@echo "### Assembling done"

card: clean build
	@echo "### Copying to sdcard..."
	@rsync -chavz --delete ${DIST_DIR}/ /media/$(shell whoami)/ENTROPI
	@echo "### Copying to sdcard done"
	-@make clean

clean:
	@echo "### Cleaning..."
	-@rm -rf ${DIST_DIR}
	-@rm -rf tmp*
	-@rm -f ${CACHE_DIR}/aport/${RELEASE_VERSION}/main/${ALPINE_ARCH}/APKINDEX.tar.gz
	-@docker rmi ${BUILDER_DOCKER_IMAGE} >/dev/null 2>&1
	@echo "### Cleaning done"

mrproper: clean
	@echo "### Purging cache..."
	-@rm -rf ${CACHE_DIR}
	@echo "### Done"

repository-builder: init
	@mkdir -p ${CACHE_DIR}/aport/${RELEASE_VERSION}/main/
	@rsync -chaz ${CACHE_DIR}/${RELEASE_BASENAME}/apks/ ${CACHE_DIR}/aport/${RELEASE_VERSION}/main/

	@tar \
	--exclude='.git' \
	-czh ./src/repository-builder | docker build -f ./src/repository-builder/repository.Dockerfile \
	--build-arg ALPINE_DOCKER_IMAGE=${ALPINE_DOCKER_IMAGE} \
	--build-arg REQUIREMENTS_FILE=${REQUIREMENTS_FILE} \
	--build-arg BUILDER_USER=${BUILDER_USER} \
	--build-arg BUILDER_UID=${BUILDER_UID} \
	--build-arg BUILDER_GID=${BUILDER_GID} \
	-t ${BUILDER_DOCKER_IMAGE} -

repository: repository-builder
	@echo "### Repository..."
	@wget --quiet --spider https://alpinelinux.org/ && \
	docker run --rm -ti \
		-e ALPINE_ARCH=${ALPINE_ARCH} \
		-e RELEASE_VERSION=${RELEASE_VERSION} \
		-e REQUIREMENTS_FILE=${REQUIREMENTS_FILE} \
		-e BUILDER_KEY_BASENAME=${BUILDER_KEY_BASENAME} \
		-e BUILDER_UID=${BUILDER_UID} \
		-e BUILDER_GID=${BUILDER_GID} \
		-v $(PWD)/secrets/packager.rsa:/root/.abuild/packager.rsa \
		-v $(PWD)/secrets/packager.rsa.pub:/root/.abuild/packager.rsa.pub \
		-v $(PWD)/src/repository-builder/abuild.conf:/root/.abuild/abuild.conf \
		-v ${CACHE_DIR}/aport:/mirror \
		${BUILDER_DOCKER_IMAGE} build-repository \
		|| echo "No Internet!!! Skipping repository..."
	@echo "### Repository done"
