.PHONY: all format format-check lint test tests integration_tests help run dev \
	install-hooks triage-sync triage-reconcile triage-render triage-check

# Default target executed when no arguments are given to make.
all: help

######################
# DEVELOPMENT
######################

dev:
	uv run langgraph dev

run:
	uv run uvicorn agent.webapp:app --reload --port 8000

install:
	uv pip install -e .

######################
# TESTING
######################

TEST_FILE ?= tests/

test tests:
	@if [ -d "$(TEST_FILE)" ] || [ -f "$(TEST_FILE)" ]; then \
		uv run pytest -vvv $(TEST_FILE); \
	else \
		echo "Skipping tests: path not found: $(TEST_FILE)"; \
	fi

integration_tests:
	@if [ -d "tests/integration_tests/" ] || [ -f "tests/integration_tests/" ]; then \
		uv run pytest -vvv tests/integration_tests/; \
	else \
		echo "Skipping integration tests: path not found: tests/integration_tests/"; \
	fi

######################
# LINTING AND FORMATTING
######################

PYTHON_FILES=.

lint:
	uv run ruff check $(PYTHON_FILES)
	uv run ruff format $(PYTHON_FILES) --diff

format:
	uv run ruff format $(PYTHON_FILES)
	uv run ruff check --fix $(PYTHON_FILES)

format-check:
	uv run ruff format $(PYTHON_FILES) --check

######################
# UPSTREAM SYNC / CHERRY-PICK TRIAGE
######################

install-hooks:
	bash scripts/install-hooks.sh

triage-sync:
	python3 scripts/triage.py sync

triage-reconcile:
	python3 scripts/triage.py reconcile

triage-render:
	python3 scripts/triage.py generate

triage-check:
	python3 scripts/triage.py generate --check

######################
# HELP
######################

help:
	@echo '----'
	@echo 'dev                          - run LangGraph dev server'
	@echo 'run                          - run webhook server'
	@echo 'install                      - install dependencies'
	@echo 'format                       - run code formatters'
	@echo 'lint                         - run linters'
	@echo 'test                         - run unit tests'
	@echo 'integration_tests            - run integration tests'
	@echo 'install-hooks                - install cherry-pick triage git hooks (per clone)'
	@echo 'triage-sync                  - fetch upstream + add new dev..upstream/main commits as untriaged'
	@echo 'triage-reconcile             - drain cherry-pick journal into the triage ledger'
	@echo 'triage-render                - regenerate docs/upstream-sync/triage.md'
	@echo 'triage-check                 - fail if triage.md is stale vs triage.jsonl (CI)'
