# Команды проверки репозитория arm-ka-docs. Запуск из корня репозитория.
# Сервисных целей (lint/test/up...) здесь нет: описание общих целей сервисов — dev/checks.md.
VENV := .venv
# Если окружение создано (`make venv`) — берём его интерпретатор, иначе системный python3 (в нём должны быть jsonschema и PyYAML)
PY := $(if $(wildcard $(VENV)/bin/python),$(CURDIR)/$(VENV)/bin/python,python3)
CHANGE ?= slice-0-skeleton
# Текущая версия модели данных — по ней рисуются диаграммы (make diagrams)
DBML ?= model/data-model-v5.19.dbml

.PHONY: venv validate-contracts validate-openspec test-snapshot test-sync-web test-sync-statements sync-web sync-statements statements-check check diagrams

# Зависимости скриптов проверки контракта — jsonschema и PyYAML (перечни кодов форм contracts/statement-code-orders.yaml)
venv:
	uv venv --python 3.11 --allow-existing $(VENV)
	uv pip install --python $(VENV)/bin/python jsonschema pyyaml

# Примеры contracts/examples/ (и examples/v1/ окна перехода) против схем JSON Schema 2020-12 + перечни кодов форм
validate-contracts:
	$(PY) scripts/validate_contracts.py

# Спека текущего изменения OpenSpec (нужен CLI openspec в PATH)
validate-openspec:
	openspec validate $(CHANGE) --strict

# Снимок для контура вырезает артефакты агента на любой глубине (dev/contour-transfer-guide.md §3); нужны git и bash
test-snapshot:
	STATEMENTS_PY=$(PY) scripts/test_prepare_contour_snapshot.sh

# sync-web.sh на синтетических репозиториях: точка синхронизации, перенос набора, отказ при расхождении, пайплайн переноса
test-sync-web:
	scripts/test_sync_web.sh

# sync-statements.sh на синтетических репозиториях: помощник проверок, копирование пакета, отказы
test-sync-statements:
	STATEMENTS_PY=$(PY) scripts/test_sync_statements.sh

# Синхронизация arm-core/web с arm-web@test одной командой (worktree, issue, PR); SYNC_ARGS="--check" или "--dry-run"
sync-web:
	scripts/sync-web.sh $(SYNC_ARGS)

# Копия пакета arm_statements в хост одной командой (worktree, issue, PR); SYNC_ARGS="--host arm-core [--check|--dry-run]"
sync-statements:
	STATEMENTS_PY=$(PY) scripts/sync-statements.sh $(SYNC_ARGS)

# Обзор свежести копий во всех хостах; в check не входит — читает соседние репозитории.
# Коды 0 и 10 — зелёные, любой другой — цель завершается кодом 1 после проверки всех трёх хостов.
statements-check:
	@rc=0; for h in arm-core tabular-parser scan-gateway; do \
	  STATEMENTS_PY=$(PY) scripts/sync-statements.sh --check --host $$h || { c=$$?; [ $$c -eq 10 ] || rc=1; }; \
	done; exit $$rc

check: validate-contracts validate-openspec test-snapshot test-sync-web test-sync-statements

# Диаграммы model/diagrams/part01…09.{svg,png} из $(DBML); нужен npx (Node.js), зависимостей Python нет
diagrams:
	python3 scripts/gen_model_diagrams.py $(DBML)
