.PHONY: help env pip_dev clean packages lint test docker_run docker_test docker_down ci_lint_and_test
.DEFAULT_GOAL := help

help:
	@fgrep -h "##" $(MAKEFILE_LIST) | fgrep -v fgrep | awk 'BEGIN {FS = ":.*?## "}; {printf "\033[36m%-20s\033[0m %s\n", $$1, $$2}'

env pip_dev: ## Setup dev environment
	python3 -m venv env
	env/bin/pip3 install --upgrade pip
	env/bin/pip3 install -r requirements.txt
	env/bin/pip3 install -r requirements-dev.txt
	env/bin/dbt deps

clean: ## Clean the environment
	env/bin/dbt clean
	rm -rf .cache logs env
	find . | grep -E '__pycache__|\.pyc|\.pyo$\' | xargs rm -rf

packages: ## Add additional DBT packages
	env/bin/dbt deps

lint: ## Run the linter
	env/bin/dotenv run -- yamllint .
	env/bin/dotenv run -- sqlfluff lint .

test: ## Run the tests
	cp -r tests/fixtures seeds
	env/bin/dotenv run -- env/bin/dbt seed --target test --full-refresh
	env/bin/dotenv run -- env/bin/dbt run --target test --full-refresh --exclude abacus_fact_sales_unified_dbt workstation_fact_sales_unified_dbt workstation_summary_dbt account_statement_periods_dbt
	env/bin/dotenv run -- env/bin/dbt test --target test --exclude abacus_fact_sales_unified_dbt workstation_fact_sales_unified_dbt workstation_summary_dbt account_statement_periods_dbt
	rm -r seeds/fixtures

# Docker targets

docker_run: ## Run dbt inside docker
	docker compose up dbt-accounting

docker_down: ## Stop and remove containers
	docker compose down --remove-orphans

ci_lint_and_test:  ## Run linters and unit tests inside docker
	docker compose up \
		--exit-code-from lint-and-test \
		--abort-on-container-exit \
		--remove-orphans \
		--build \
		lint-and-test
