.PHONY: generate generate-fetch generate-clean generate-models generate-api build install test test-installed update-check

INSTALL_TEST_VENV := .install-test-env
INSTALL_TEST_WORK := .install-test-workdir

SPEC_URL = https://v2-staging.api.cohost.ai/external-openapi.json
SPEC_FILE = .openapi-spec.json
GENERATED_DIR = cohost_client/generated

# Fetch the latest OpenAPI spec from staging
generate-fetch:
	curl -sSL $(SPEC_URL) -o $(SPEC_FILE)

# Remove all generated code
generate-clean:
	rm -rf $(GENERATED_DIR)

# Generate Pydantic models from the spec
# (parent dirs must exist: generate-clean removes cohost_client/generated entirely)
generate-models:
	mkdir -p $(GENERATED_DIR)/models
	datamodel-codegen \
		--input $(SPEC_FILE) \
		--input-file-type openapi \
		--output $(GENERATED_DIR)/models/__init__.py \
		--output-model-type pydantic_v2.BaseModel \
		--use-annotated \
		--use-double-quotes \
		--collapse-root-models \
		--target-python-version 3.10 \
		--disable-timestamp

# Generate API function modules from the spec using custom templates
generate-api:
	python scripts/generate.py api

# Full generation: fetch → clean → models → api
generate: generate-fetch generate-clean generate-models generate-api

# Build the package
build: generate
	hatch build

# Install in editable mode (dev)
install:
	pip install -e ".[dev]"

# Run tests against the source tree (editable install: make install)
test:
	pytest

# Build wheel, install it in an isolated venv, run tests from a copy of tests/
# only (so imports resolve to site-packages — verifies the distributable package).
test-installed: build
	rm -rf $(INSTALL_TEST_WORK)
	mkdir -p $(INSTALL_TEST_WORK)
	cp -R tests $(INSTALL_TEST_WORK)/
	cp scripts/pytest-installed.ini $(INSTALL_TEST_WORK)/pytest.ini
	rm -rf $(INSTALL_TEST_VENV)
	python3 -m venv $(INSTALL_TEST_VENV)
	$(INSTALL_TEST_VENV)/bin/pip install -q --upgrade pip
	$(INSTALL_TEST_VENV)/bin/pip install -q pytest pytest-httpx python-dotenv
	$(INSTALL_TEST_VENV)/bin/pip install -q --force-reinstall $$(ls -t dist/*.whl | head -1)
	cd $(INSTALL_TEST_WORK) && ../$(INSTALL_TEST_VENV)/bin/python -m pytest -v

# Check if spec has changed (exits 1 if outdated — use in CI)
update-check:
	cohost-update --check
