SHELL := /bin/bash
PY ?= .venv/bin/python
SLUG := harness-evaluation-continue
A ?= gemini-3.8-flash
B ?= gemini-3.5-flash-lite
PROJECT ?= $(shell sed -n 's/^GOOGLE_CLOUD_PROJECT=//p' .env 2>/dev/null)
REGION ?= europe-west1
# Pas de `-include .env` + `export` : les variables de la ligne de commande doivent l'emporter.
# evalh lit .env lui-même (python-dotenv, sans écraser l'environnement).

.DEFAULT_GOAL := help
help: ## Liste les commandes
	@grep -hE '^[a-z0-9-]+:.*## ' Makefile | awk -F':.*## ' '{printf "  make %-13s %s\n", $$1, $$2}'

setup: ## Crée .venv et installe les dépendances
	@test -d .venv || python3 -m venv .venv
	@.venv/bin/pip install -q -r requirements.txt
	@test -f .env || cp .env.example .env
	@echo "Prêt. Renseignez .env puis : make test"

test: ## Tests sans clé ni réseau
	@$(PY) -m pytest -q

dataset-hash: ## Recalcule le manifeste des jeux de données (après une modification volontaire)
	@$(PY) -m evalh dataset-hash data/tickets.jsonl data/trajectoires.jsonl data/calibration_juge.jsonl

check-key:
	@if [ -z "$$GOOGLE_API_KEY" ] && [ "$$GOOGLE_GENAI_USE_VERTEXAI" != "TRUE" ] && \
	  ! grep -E '^(GOOGLE_API_KEY=.+|GOOGLE_GENAI_USE_VERTEXAI=TRUE)' .env 2>/dev/null | grep -vq remplacez; then \
	  echo "Aucune clé : renseignez GOOGLE_API_KEY (ou GOOGLE_GENAI_USE_VERTEXAI=TRUE) dans .env"; exit 2; fi

calibrate: check-key ## Mesure l'accord juge / annotations humaines (kappa)
	@$(PY) -m evalh calibrate --suite suites/triage.yaml --out runs/calibration.json

run: check-key ## Compare les modèles A et B sur le tri, écrit runs/rapport-triage.html
	@$(PY) -m evalh run --suite suites/triage.yaml --model $(A) --out runs/triage/A
	@$(PY) -m evalh run --suite suites/triage.yaml --model $(B) --out runs/triage/B
	@$(PY) -m evalh compare runs/triage/A runs/triage/B --suite suites/triage.yaml --html runs/rapport-triage.html; \
	  echo "code de sortie de la porte : $$?"

e2e: check-key ## Bout en bout réel : calibration, tri A/B, agent A/B, deux rapports
	@$(MAKE) --no-print-directory calibrate
	@$(MAKE) --no-print-directory run
	@$(PY) -m evalh run --suite suites/agent.yaml --model $(A) --out runs/agent/A
	@$(PY) -m evalh run --suite suites/agent.yaml --model $(B) --out runs/agent/B
	@$(PY) -m evalh compare runs/agent/A runs/agent/B --suite suites/agent.yaml --html runs/rapport-agent.html; \
	  echo "code de sortie de la porte : $$?"

clean: ## Supprime les artefacts locaux : résultats, cache des sorties, caches Python
	@rm -rf runs .cache .pytest_cache __pycache__ */__pycache__
	@echo "Artefacts supprimés (runs/, .cache/)."

reset: clean ## clean + supprime .venv (garde .env)
	@rm -rf .venv
	@echo "Environnement supprimé (.env conservé)."

cloud-up: ## Sans objet : aucune ressource Google Cloud n'est créée
	@echo "Ce projet ne crée aucune ressource Google Cloud (appels d'API uniquement)."

cloud-down: ## Sans objet : rien à supprimer
	@echo "Rien à supprimer : aucune ressource Google Cloud créée par ce projet."

cloud-status: ## Sans objet
	@echo "Aucune ressource Google Cloud associée à $(SLUG)."

.PHONY: help setup test dataset-hash check-key calibrate run e2e clean reset cloud-up cloud-down cloud-status
