SHELL := /bin/sh
PROGRAM := sloptrap

KNOWN_INSTALL_DIRS := $(HOME)/.local/bin /usr/local/bin /opt/homebrew/bin /opt/local/bin /usr/pkg/bin /usr/bin /usr/local/sbin
AUTO_INSTALL_DIR := $(shell sh -c 'set -e; for dir in $(KNOWN_INSTALL_DIRS); do [ -n "$$dir" ] || continue; if [ -d "$$dir" ] && [ -w "$$dir" ]; then printf "%s" "$$dir"; exit 0; fi; done; fallback="$$HOME/.local/bin"; mkdir -p "$$fallback"; printf "%s" "$$fallback"')
INSTALL_DIR ?= $(AUTO_INSTALL_DIR)
INSTALL_PATH := $(DESTDIR)$(INSTALL_DIR)/$(PROGRAM)

COLOR_TEXT := \033[38;5;247m
COLOR_HIGHLIGHT := \033[38;5;202m
COLOR_ERROR := \033[38;5;160m
COLOR_COMMENT := \033[38;5;242m
RESET := \033[0m

PREFIX_TEXT := \033[38;5;247m░\033[0m 
PREFIX_HIGHLIGHT := \033[38;5;202m█\033[0m 
PREFIX_ERROR := \033[38;5;160m▒\033[0m 
PREFIX_COMMENT := \033[38;5;242m▒\033[0m 

.PHONY: help install update uninstall regress

help:
	@printf '%b%bsloptrap%b installer %b\n' '$(PREFIX_TEXT)' '$(COLOR_HIGHLIGHT)' '$(COLOR_TEXT)' '$(RESET)'
	@printf '%b%b  make install %b[INSTALL_DIR=%s]%b\n' '$(PREFIX_TEXT)' '$(COLOR_HIGHLIGHT)' '$(COLOR_COMMENT)' '$(INSTALL_DIR)' '$(RESET)'
	@printf '%b%b  make uninstall%b\n' '$(PREFIX_TEXT)' '$(COLOR_HIGHLIGHT)' '$(RESET)'

install update: $(PROGRAM)
	@action="Installing"; if [ -f "$(INSTALL_PATH)" ]; then action="Updating"; fi; \
		printf '%b%b%s%b sloptrap %b(%s)%b\n' '$(PREFIX_COMMENT)' '$(COLOR_HIGHLIGHT)' "$$action" '$(COLOR_TEXT)' '$(COLOR_COMMENT)' '$(INSTALL_PATH)' '$(RESET)'
	@install -Dm755 $(PROGRAM) "$(INSTALL_PATH)"
	@printf '%b%bSuccess!%b Run it with:%b\n' '$(PREFIX_COMMENT)' '$(COLOR_HIGHLIGHT)' '$(COLOR_TEXT)' '$(RESET)'
	@printf '%b%b%b  %s /path/to/project%b\n' '$(PREFIX_HIGHLIGHT)' '$(COLOR_HIGHLIGHT)' '\033[1m' '$(PROGRAM)' '$(RESET)'
	@printf '%b%bConfigure your project with the wizard:%b\n' '$(PREFIX_TEXT)' '$(COLOR_TEXT)' '$(RESET)'
	@printf '%b%b  sloptrap /path/to/project wizard%b\n' '$(PREFIX_COMMENT)' '$(COLOR_COMMENT)' '$(RESET)'

uninstall:
	@printf '%b%bRemoving%b %b%s%b\n' '$(PREFIX_COMMENT)' '$(COLOR_TEXT)' '$(COLOR_TEXT)' '$(COLOR_COMMENT)' '$(INSTALL_PATH)' '$(RESET)'
	@rm -f "$(INSTALL_PATH)"

regress:
	@./tests/run_tests.sh
