# SigHej — Makefile
# Shortcuts for backend (Python/FastAPI), admin (Next.js) og app (Flutter)
# Kræver: docker, docker compose, python 3.11+, node 20+, flutter

.DEFAULT_GOAL := help

# ─── Colours ───────────────────────────────────────────────────────────────────
CYAN  := \033[0;36m
RESET := \033[0m

# ─── Hjælp ─────────────────────────────────────────────────────────────────────
.PHONY: help
help:
	@echo ""
	@echo "  $(CYAN)SigHej — build targets$(RESET)"
	@echo ""
	@echo "  $(CYAN)Dev environment$(RESET)"
	@echo "    make up           Start alle services (docker compose)"
	@echo "    make down         Stop og fjern containers"
	@echo "    make logs         Tail logs fra alle services"
	@echo "    make ps           Vis kørende services"
	@echo ""
	@echo "  $(CYAN)Backend (FastAPI)$(RESET)"
	@echo "    make be-install   Installer Python deps (venv)"
	@echo "    make be-dev       Kør backend lokalt (uvicorn --reload)"
	@echo "    make be-test      Kør pytest"
	@echo "    make be-lint      Ruff check + format"
	@echo "    make be-fmt       Auto-fix med ruff"
	@echo ""
	@echo "  $(CYAN)Admin (Next.js)$(RESET)"
	@echo "    make adm-install  npm install"
	@echo "    make adm-dev      Kør admin lokalt (next dev)"
	@echo "    make adm-build    Production build"
	@echo "    make adm-lint     ESLint"
	@echo ""
	@echo "  $(CYAN)App (Flutter)$(RESET)"
	@echo "    make app-get      flutter pub get"
	@echo "    make app-analyze  flutter analyze"
	@echo "    make app-test     flutter test"
	@echo "    make app-android  Build APK (debug)"
	@echo "    make app-ios      Build iOS (debug, kræver macOS + Xcode)"
	@echo "    make app-setup    Første gang: flutter create platform-dirs"
	@echo ""
	@echo "  $(CYAN)CI / Full check$(RESET)"
	@echo "    make check        be-lint + be-test + adm-lint + app-analyze"
	@echo "    make build        Docker build af alle services"
	@echo ""

# ─── Docker compose ────────────────────────────────────────────────────────────
.PHONY: up down logs ps build

up:
	docker compose up -d

down:
	docker compose down

logs:
	docker compose logs -f

ps:
	docker compose ps

build:
	docker compose build

# ─── Backend ───────────────────────────────────────────────────────────────────
VENV       := backend/.venv
PYTHON     := $(VENV)/bin/python
PIP        := $(VENV)/bin/pip
PYTEST     := $(VENV)/bin/pytest
RUFF       := $(VENV)/bin/ruff

$(VENV)/bin/activate: backend/requirements-dev.txt
	python3 -m venv $(VENV)
	$(PIP) install --upgrade pip
	$(PIP) install -r backend/requirements-dev.txt

.PHONY: be-install be-dev be-test be-lint be-fmt

be-install: $(VENV)/bin/activate

be-dev: be-install
	cd backend && $(abspath $(PYTHON)) -m uvicorn app.main:app --reload --port 8000

be-test: be-install
	cd backend && $(abspath $(PYTEST)) -v

be-lint: be-install
	$(RUFF) check backend/app backend/tests

be-fmt: be-install
	$(RUFF) check --fix backend/app backend/tests
	$(RUFF) format backend/app backend/tests

# ─── Admin (Next.js) ───────────────────────────────────────────────────────────
.PHONY: adm-install adm-dev adm-build adm-lint

adm-install:
	cd admin && npm install

adm-dev: adm-install
	cd admin && npm run dev

adm-build: adm-install
	cd admin && npm run build

adm-lint: adm-install
	cd admin && npm run lint

# ─── App (Flutter) ─────────────────────────────────────────────────────────────
.PHONY: app-setup app-get app-analyze app-test app-android app-ios

app-setup:
	@echo "Kører flutter create for at generere platform-dirs..."
	cd app && flutter create --platforms=android,ios --project-name sighej .
	@echo "Genskaber vores platform-filer..."
	cd app && git checkout android/app/src/main/AndroidManifest.xml ios/Runner/Info.plist 2>/dev/null || true

app-get:
	cd app && flutter pub get

app-analyze: app-get
	cd app && flutter analyze --no-fatal-infos

app-test: app-get
	cd app && flutter test

app-android: app-get
	cd app && flutter build apk --debug

app-ios: app-get
	cd app && flutter build ios --debug --no-codesign

# ─── CI: fuld check ────────────────────────────────────────────────────────────
.PHONY: check

check: be-lint be-test adm-lint app-analyze
	@echo ""
	@echo "  ✓ Alle checks bestået"
	@echo ""
