# A quick installation script for painless discord bots.
# v2.0.0
# Copyright (c) 2019 0x5c
# Released under the terms of the MIT license.
# Part of:
# https://github.com/0x5c/quick-bot-no-pain


.DEFAULT_GOAL := help

### Variables ###
# Those are the defaults; they can be over-ridden if specified
# at en environment level or as 'make' arguments.
BOTENV ?= botenv
PYTHON_BIN ?= python3.11
PIP_OUTPUT ?= -q


### Support targets ###

.PHONY: help
help:
	@echo ""
	@echo "\033[97m>>>>>>  Default dummy target  <<<<<<"
	@echo "\033[37mYou might want to specify a target:"
	@echo "\033[32m    --> make install"
	@echo "\033[94m    --> make clean"
	@echo "\033[0m"


### Actual install/setup targets ###

# Main install target
.PHONY: install
install: $(BOTENV)/req_done data/options.py data/keys.py data/plugins

# Virual environment setup
$(BOTENV)/success:
ifneq ("$(wildcard ./$(BOTENV).)",)
	@echo "\033[94m--> Creating the virtual environment...\033[0m"
	@$(PYTHON_BIN) -m venv $(BOTENV)
	@touch $(BOTENV)/success
endif

# Installing requirements
$(BOTENV)/req_done: requirements.txt $(BOTENV)/success
	@echo "\033[34;1m--> Installing the dependencies...\033[0m"
	@. $(BOTENV)/bin/activate; \
		pip install ${PIP_OUTPUT} -U pip setuptools wheel; \
		pip install ${PIP_OUTPUT} -U -r requirements.txt
	@touch $(BOTENV)/req_done

# Creating the ./data subdirectory
data:
	@echo "\033[34;1m--> Creating ./data ...\033[0m"
	@mkdir -p data

# Creating the ./data/plugins subdirectory
data/plugins: ./data
	@echo "\033[34;1m--> Creating ./data/plugins ...\033[0m"
	@mkdir -p data/plugins

# Copying templates
data/options.py data/keys.py: ./data
	@echo "\033[34;1m--> Copying template for ./$@ ...\033[0m"
	@cp -nv ./templates/$@ ./$@
	@touch ./$@

# Deletes the python cache and the virtual environment
.PHONY: clean
clean:
	@echo "\033[34;1m--> Removing python cache files...\033[0m"
	rm -rf __pycache__
	@echo "\033[34;1m--> Removing the virtual environment...\033[0m"
	rm -rf $(BOTENV)


### Dev targets ###
.PHONY: dev-install
dev-install: $(BOTENV)/dev_req_done data/options.py data/keys.py data/plugins

# Installing dev requirements
$(BOTENV)/dev_req_done: dev-requirements.txt $(BOTENV)/success
	@echo "\033[34;1m--> Installing the dependencies...\033[0m"
	@. $(BOTENV)/bin/activate; \
		pip install ${PIP_OUTPUT} -U pip setuptools wheel; \
		pip install ${PIP_OUTPUT} -U -r dev-requirements.txt
	@touch $(BOTENV)/dev_req_done



### Special targets ###
.PHONY: onlyenv
onlyenv: $(BOTENV)/success