APP=$(shell basename $(CURDIR))
PACKAGE=$(subst _,-,$(APP))
STAGE?=dev

VENV_NAME ?= venv
VENV_ACTIVATE=. $(VENV_NAME)/bin/activate

PYTHON = $(VENV_NAME)/bin/python3
PIP = $(VENV_NAME)/bin/pip3
PYTEST = $(VENV_NAME)/bin/pytest
PYLINT = $(VENV_NAME)/bin/pylint --disable=R,C
TWINE = $(VENV_NAME)/bin/twine
YAPF = $(VENV_NAME)/bin/yapf
ISORT = $(VENV_NAME)/bin/isort

DOCKER_VENV_NAME ?= /tmp/dockerenv
BUILD_VENV_NAME ?= /tmp/buildenv
WHEELHOUSE ?= wheels

# Set AWS ECR address if your tools is going to be executed in a cloud
REGISTRY ?= $(APP)
REVISION ?= $(shell git rev-parse --short=8 HEAD)
VERSION ?= $(shell git rev-parse --abbrev-ref HEAD)
BUILDTIME = $(shell date -u +"%Y%m%d%H%M%S")

TEST_IMAGE = 475275892927.dkr.ecr.us-east-1.amazonaws.com/python-testing:3.7-aws2

.DEFAULT_GOAL := help

## -
## Local commands:

##   venv - create local virtual env (base.pip dependencies)
$(VENV_NAME)/bin/activate:
	python3.7 -m venv $(VENV_NAME)

$(VENV_NAME): $(VENV_NAME)/bin/activate
	@echo "Creating virtial environment"
	@cp pip.conf $(VENV_NAME)/
	$(PIP) install -U pip
	$(PIP) install -e .
	# $(PIP) install -e .

##   lint - run pylint check
.PHONY:lint
lint: testenv
	@echo "Running linter"
	$(PYLINT) $(APP)

##   fmt - reformat code with yapf
.PHONY:fmt
fmt: $(VENV_NAME)
	$(ISORT) -rc .
	$(YAPF) . --recursive --verbose --in-place --parallel

##   clean - delete unnecessary files
.PHONY: clean
clean:
	@echo "Deleting unnecessary files"
	@rm -rf build/
	@rm -rf dist/
	@rm -rf ./$(WHEELHOUSE)/
	@rm -rf *.egg-info
	@rm -rf *.pyc
	@rm -f $(PACKAGE)-*.tar.gz
	@rm -rf .*_cache
	@rm -rf __pycache__/
	@find . -name '*.pyc' -delete
	@find . -name '__pycache__' -delete

## -
## help - this message
.PHONY: help
help: Makefile
	@echo "Application: ${APP}\n"
	@echo "Run command:\n  make <target>\n"
	@grep -E -h '^## .*' $(MAKEFILE_LIST) | sed -n 's/^##//p'  | column -t -s '-' |  sed -e 's/^/ /'
