.DELETE_ON_ERROR:
.ONESHELL:
.SHELLFLAGS   := -eu -o pipefail -c
MAKEFLAGS     += --warn-undefined-variables
MAKEFLAGS     += --no-builtin-rules
SHELL         := bash

.PHONY: help tree init run view clean debug build install config publish commit valid

.DEFAULT_GOAL := help

VENV           = .venv
ACTIVATE       = $(VENV)/bin/activate
PIP            = $(VENV)/bin/pip
PYTHON         = $(VENV)/bin/python
PROMPT         = "Enter commit message: "
BREWPYTHON     = /opt/homebrew/bin/python3
PYGITIGNORE    = $(HOME)/Repos/gitignore/Python.gitignore
GIT_ORG        = ts
GIT_REPO       = $$(basename $$(pwd))
GIT_URL        = http://git.tsmetallic.com/$(GIT_ORG)/$(GIT_REPO)
PACKAGE        = tsmetallic
PROJECT        = tsmetallic


help:
	@echo -e ""
	@echo -e "Available Make Commands"
	@echo -e "========================================================="
	@echo -e "Setup Commands:"
	@echo -e "  make init         : Initialize vcs & link remote"
	@echo -e "  make install      : Install pkg/module in local env"
	@echo -e "  make deps         : Show regular & opt dependencies"
	@echo -e "Dev Commands:"
	@echo -e "  make tree         : Show project files excluding caches"
	@echo -e "  make commit       : Commit changes & push to remote"
	@echo -e "  make valid        : Validate runtime config files"
	@echo -e "Test Commands:"
	@echo -e "  make test         : Execute full test suite"
	@echo -e "  make utest        : Execute unit tests"
	@echo -e "  make itest        : Execute integration tests"
	@echo -e "Build Commands:"
	@echo -e "  make build        : Build wheel distribution"
	@echo -e "  make clean        : Remove caches and artifacts"
	@echo -e "  make publish      : Bump version and push to PyPI"
	@echo -e "Version Commands:"
	@echo -e "  make vmajor       : Increment major version"
	@echo -e "  make vminor       : Increment minor version"
	@echo -e "  make vpatch       : Increment patch version"
	@echo -e ""

publish:
	@$(VENV)/bin/bump && $(VENV)/bin/flit publish

commit:
	@git add .; read -p $(PROMPT) msg; git commit -m "\"$$msg\""; git push

valid:
	@[[ command -v validator ]] || make install_validator
	@validator --exclude-dirs=.venv,.git .

install_validator:
	[[ "$$(uname)" == Darwin ]] && brew install config-file-validator || \
	go install github.com/Boeing/config-file-validator/v2/cmd/validator@latest

tree:
	@tree -I "*.egg-info|__pycache__"

debug:
	@/Users/tjsharley/Projects/tsm/.venv/bin/tsm-tgl

view:
	@source $(ACTIVATE) && $(PYTHON) src/heroes/view.py database.db team
	@source $(ACTIVATE) && $(PYTHON) src/heroes/view.py database.db hero

build: $(ACTIVATE)
	@source $(ACTIVATE) && $(PYTHON) -m build

install: $(ACTIVATE)
	@source $(ACTIVATE) && $(PYTHON) -m pip install -e .

$(ACTIVATE):
	@$(BREWPYTHON) -m venv $(VENV)
	@$(PYTHON) -m pip install --upgrade pip
	@$(PYTHON) -m pip install -e '.[dev]'

clean:
	@rm -rf src/$(PACKAGE)/__pycache__
	@rm -rf dist/*

requirements.txt:
	@pip freeze --exclude-editable >> 'requirements.txt'

init: .git

.git: .gitignore
	@git init .
	@git add .
	@git commit -a -m 'Initial commit'
	@git remote add origin $(GIT_URL)
	@git push -u origin main

.gitignore:
	@cp $(PYGITIGNORE) .gitignore

vpatch:
	@python -m bump_version patch

vminor:
	@python -m bump_version minor

vmajor:
	@python -m bump_version major
