UV ?= uv
RUN := $(UV) run --locked
MLFLOW_URL ?= http://127.0.0.1:5000/
ARCHIVE ?= MLOps_TP2_Nom_Prenom.zip

install:
	$(UV) sync --locked

doctor:
	@command -v $(UV) >/dev/null || { echo "uv est requis : https://docs.astral.sh/uv/getting-started/installation/"; exit 1; }
	@command -v git >/dev/null || { echo "git est requis"; exit 1; }
	@$(RUN) dvc --version
	@$(RUN) pytest --version
	@$(RUN) mlflow --version
	@$(RUN) python -c 'import pandera; print("Pandera", pandera.__version__)'
	@echo "Environnement TP2 prêt"

dvc-init:
	test -f .dvc/config || $(RUN) dvc init --no-scm

lock:
	$(UV) lock

export-requirements:
	$(UV) export --locked --no-hashes --no-header --no-emit-project --output-file requirements.txt

mlflow-server:
	$(RUN) mlflow server --backend-store-uri sqlite:///mlflow.db --host 127.0.0.1 --port 5000 --workers 1

mlflow-health:
	@$(RUN) python scripts/wait_for_mlflow.py --url "$(MLFLOW_URL)"

validate-data:
	PYTHONPATH=. $(RUN) python -m maintenance_ml.data.validate

quality-gate:
	PYTHONPATH=. $(RUN) python -m maintenance_ml.modeling.quality_gate

repro:
	$(MAKE) dvc-init
	PYTHONPATH=. $(RUN) dvc repro

pipeline:
	$(MAKE) test
	$(MAKE) mlflow-health
	$(MAKE) repro

test:
	mkdir -p reports
	PYTHONPATH=. $(RUN) python -m pytest -q --junitxml=reports/test_report.xml

validate-submission:
	PYTHONPATH=. $(RUN) python tests/validate_submission.py

report:
	mkdir -p reports/figures
	test -f reports/tp2_report.md || cp reports/tp2_report_template.md reports/tp2_report.md

package:
	$(MAKE) validate-submission
	PYTHONPATH=. $(RUN) python scripts/package_submission.py --output "$(ARCHIVE)"
