# =============================================================================
# ja4-platform — Monorepo Makefile
# Service de capture : ja4ebpf (eBPF CO-RE)
# =============================================================================

VERSION ?= $(shell git describe --tags --always 2>/dev/null || echo dev)

.PHONY: help \
        build-all test-all rpm-all dist \
        build-ja4ebpf test-ja4ebpf rpm-ja4ebpf \
        build-bot-detector test-bot-detector \
        build-dashboard test-dashboard \
        test-ja4common-python \
        test-all-stacks test-nginx test-nginx-varnish test-hitch-varnish test-apache \
        test-matrix \
        test-integration test-integration-keep test-integration-down \
        reload-prod-logs init-stack import-prod-data init-and-import \
        purge-db

.DEFAULT_GOAL := help

help: ## Affiche cette aide
	@echo ""
	@echo "  ja4-platform — Makefile"
	@echo "  ─────────────────────────────────────────────────────"
	@echo ""
	@echo "  Build"
	@echo "    make build-all              Construit toutes les images Docker"
	@echo "    make build-ja4ebpf          Image ja4ebpf (agent eBPF CO-RE)"
	@echo "    make build-bot-detector     Image bot-detector (détection ML)"
	@echo "    make build-dashboard        Image dashboard (SOC UI)"
	@echo ""
	@echo "  Tests unitaires"
	@echo "    make test-all               Lance tous les tests unitaires"
	@echo "    make test-ja4ebpf           Tests Go ja4ebpf"
	@echo "    make test-bot-detector      Tests Python bot-detector"
	@echo "    make test-dashboard         Tests Python dashboard"
	@echo "    make test-ja4common-python  Tests Python ja4_common"
	@echo ""
	@echo "  Tests d'intégration (par stack)"
	@echo "    make test-all-stacks        Toutes les stacks sur Rocky Linux 9"
	@echo "    make test-apache            Stack Apache + ja4ebpf"
	@echo "    make test-nginx             Stack nginx + ja4ebpf"
	@echo "    make test-nginx-varnish     Stack nginx + Varnish + ja4ebpf"
	@echo "    make test-hitch-varnish     Stack hitch + Varnish + ja4ebpf"
	@echo ""
	@echo "  Matrice multi-distro"
	@echo "    make test-matrix            Toutes stacks × el8/el9/el10"
	@echo "    make test-matrix MATRIX_STACKS=nginx,apache MATRIX_DISTROS=el9,el10"
	@echo ""
	@echo "  RPM"
	@echo "    make rpm-all                Construit tous les RPMs ja4ebpf (el8/el9/el10)"
	@echo "    make rpm-ja4ebpf            RPMs ja4ebpf (el8, el9, el10)"
	@echo "    make dist                   Alias de rpm-all"
	@echo ""
	@echo "  Base de données"
	@echo "    make init-stack             Initialise ClickHouse (schéma complet)"
	@echo "    make import-prod-data       Importe les données prod (date shift)"
	@echo "    make init-and-import        init-stack + import-prod-data"
	@echo "    make reload-prod-logs       Exporte prod → importe en dev"
	@echo "    make purge-db               Supprime et recrée les bases ja4_*"
	@echo ""

# ── Cibles agrégées ──────────────────────────────────────────────────────────

build-all: build-ja4ebpf build-bot-detector build-dashboard
	@echo "All services built."

test-all: test-ja4ebpf test-bot-detector test-dashboard test-ja4common-python
	@echo "All unit tests completed."

rpm-all: rpm-ja4ebpf
	@echo "All RPMs built."

dist: rpm-all
	@echo "RPMs disponibles dans services/ja4ebpf/dist/"

# ── ja4ebpf (agent eBPF CO-RE) ───────────────────────────────────────────────

build-ja4ebpf:
	docker build \
	  -f services/ja4ebpf/Dockerfile \
	  --build-arg BUILD_VERSION=$(VERSION) \
	  -t ja4-platform/ja4ebpf:latest \
	  .

test-ja4ebpf:
	docker build \
	  -f services/ja4ebpf/Dockerfile.tests \
	  -t ja4-platform/ja4ebpf-tests:latest \
	  .
	docker run --rm ja4-platform/ja4ebpf-tests:latest

rpm-ja4ebpf:
	# Build multi-distro : el8 (AlmaLinux 8) + el9 (Rocky 9) + el10 (AlmaLinux 10)
	# Sortie : services/ja4ebpf/dist/el{8,9,10}/ja4ebpf-*.rpm
	docker build \
	  -f services/ja4ebpf/Dockerfile.package \
	  --target output \
	  --output type=local,dest=services/ja4ebpf/dist \
	  --build-arg BUILD_VERSION=$(VERSION) \
	  .
	@echo ""
	@echo "RPMs produits :"
	@find services/ja4ebpf/dist -name '*.rpm' | sort | sed 's/^/  /'

# ── bot-detector ─────────────────────────────────────────────────────────────

build-bot-detector:
	docker build \
	  -f services/bot-detector/bot_detector/Dockerfile \
	  -t ja4-platform/bot-detector:latest \
	  .

test-bot-detector:
	docker build \
	  -f services/bot-detector/bot_detector/Dockerfile.tests \
	  -t ja4-platform/bot-detector-tests:latest \
	  .
	docker run --rm ja4-platform/bot-detector-tests:latest

# ── dashboard ────────────────────────────────────────────────────────────────

build-dashboard:
	docker build \
	  -f services/dashboard/Dockerfile \
	  -t ja4-platform/dashboard:latest \
	  .

test-dashboard:
	docker build \
	  -f services/dashboard/Dockerfile.tests \
	  -t ja4-platform/dashboard-tests:latest \
	  .
	docker run --rm ja4-platform/dashboard-tests:latest

# ── shared/python/ja4_common ─────────────────────────────────────────────────

test-ja4common-python:
	docker build \
	  -f shared/python/ja4_common/Dockerfile.tests \
	  -t ja4-platform/ja4common-python-tests:latest \
	  shared/python/ja4_common/
	docker run --rm ja4-platform/ja4common-python-tests:latest

# ── Tests d'intégration par stack ────────────────────────────────────────────

test-all-stacks: ## Toutes les stacks sur la distro par défaut (Rocky Linux 9)
	cd tests/integration && bash run-all-stacks.sh

test-apache:
	cd tests/integration && bash apache/run-tests.sh

test-nginx:
	cd tests/integration && bash nginx/run-tests.sh

test-nginx-varnish:
	cd tests/integration && bash nginx-varnish/run-tests.sh

test-hitch-varnish:
	cd tests/integration && bash hitch-varnish/run-tests.sh

# ── Matrice multi-distro ─────────────────────────────────────────────────────

test-matrix: ## Toutes stacks × el8 + el9 + el10
	cd tests/integration && bash run-distro-matrix.sh \
	  $${MATRIX_STACKS:+--stacks=$${MATRIX_STACKS}} \
	  $${MATRIX_DISTROS:+--distros=$${MATRIX_DISTROS}}

# ── Compat : anciens targets d'intégration ───────────────────────────────────

test-integration: ## Ancien target — alias vers test-all-stacks
	$(MAKE) test-all-stacks

test-integration-keep:
	cd tests/integration && bash run-all-stacks.sh --no-down

test-integration-down:
	cd tests/integration && \
	  for stack in apache nginx nginx-varnish hitch-varnish; do \
	    [ -f "$$stack/docker-compose.yml" ] && \
	      docker compose -f "$$stack/docker-compose.yml" down -v --remove-orphans 2>/dev/null || true; \
	  done

# ── Base de données ───────────────────────────────────────────────────────────

reload-prod-logs:
	./scripts/reload-prod-logs.sh

init-stack:
	./scripts/init-stack.sh

import-prod-data:
	./scripts/import-prod-data.sh

init-and-import:
	./scripts/init-stack.sh --import-prod

purge-db:
	./scripts/init-stack.sh --reset
