# Entwicklungs-Helfer für moneyfy.
.DEFAULT_GOAL := help
BACKEND := backend
FRONTEND := frontend
PY := $(BACKEND)/.venv/bin/python
UV := uv

.PHONY: help
help: ## Verfügbare Ziele anzeigen
	@grep -hE '^[a-zA-Z_-]+:.*?## ' $(MAKEFILE_LIST) \
		| awk 'BEGIN {FS = ":.*?## "}; {printf "  \033[36m%-18s\033[0m %s\n", $$1, $$2}'

.PHONY: install
install: ## Backend-Abhängigkeiten in .venv installieren
	$(UV) venv --python 3.12 $(BACKEND)/.venv
	cd $(BACKEND) && ../$(BACKEND)/.venv/bin/python -m ensurepip --version >/dev/null 2>&1 || true
	cd $(BACKEND) && $(UV) pip install -e ".[dev]"

.PHONY: migrate
migrate: ## Alembic-Migrationen auf den aktuellen Stand bringen
	cd $(BACKEND) && .venv/bin/alembic upgrade head

.PHONY: revision
revision: ## Neue Migration erzeugen: make revision m="beschreibung"
	cd $(BACKEND) && .venv/bin/alembic revision --autogenerate -m "$(m)"

.PHONY: seed
seed: ## Stammdaten (Kategoriebaum, Benachrichtigungsregeln) anlegen
	cd $(BACKEND) && .venv/bin/python -m app.scripts.seed

.PHONY: vendor-icons
vendor-icons: ## simple-icons-Index neu erzeugen (benötigt npm und Netzzugang)
	cd $(BACKEND) && .venv/bin/python scripts/vendor_simple_icons.py

.PHONY: dev
dev: ## Backend mit Hot Reload starten
	cd $(BACKEND) && .venv/bin/uvicorn app.main:app --reload --port 8000

.PHONY: test
test: ## Backend-Tests ausführen
	cd $(BACKEND) && .venv/bin/python -m pytest

.PHONY: lint
lint: ## ruff check und Formatprüfung
	cd $(BACKEND) && .venv/bin/ruff check .
	cd $(BACKEND) && .venv/bin/ruff format --check .

.PHONY: format
format: ## Code formatieren und automatisch behebbare Regelverstöße korrigieren
	cd $(BACKEND) && .venv/bin/ruff check --fix .
	cd $(BACKEND) && .venv/bin/ruff format .

.PHONY: fe-install
fe-install: ## Frontend-Abhängigkeiten installieren
	cd $(FRONTEND) && npm ci

.PHONY: fe-dev
fe-dev: ## Frontend mit Hot Reload starten (Proxy auf das Backend)
	cd $(FRONTEND) && npm run dev

.PHONY: fe-lint
fe-lint: ## tsc und eslint
	cd $(FRONTEND) && npm run typecheck
	cd $(FRONTEND) && npm run lint

.PHONY: fe-test
fe-test: ## Frontend-Tests ausführen
	cd $(FRONTEND) && npm run test

.PHONY: fe-build
fe-build: ## Produktionsbundle bauen
	cd $(FRONTEND) && npm run build

.PHONY: check
check: lint test fe-lint fe-test ## Alle Prüfungen von Backend und Frontend
