# omnichannel-configserver-mcp — сборка, тесты, линт.
GO            ?= go
GOLANGCI_LINT ?= golangci-lint

.PHONY: build test fmt lint tidy tidy-check ci demo e2e demo-down

# Бинарник модуля.
build:
	$(GO) build -o omnichannel-configserver-mcp .

# Тесты с race-детектором (основной гейт).
test:
	$(GO) test -race ./... -count=1

# Форматирование.
fmt:
	gofmt -w .

# Статический анализ + проверка форматирования.
lint:
	$(GOLANGCI_LINT) run ./...
	@unformatted=$$(gofmt -l .); \
	if [ -n "$$unformatted" ]; then echo "gofmt: нужно форматирование: $$unformatted"; exit 1; fi

tidy:
	$(GO) mod tidy

# Проверка, что go.mod/go.sum в tidy-состоянии.
tidy-check:
	@$(GO) mod tidy -diff >/dev/null 2>&1 || { echo "go.mod не tidy — запусти make tidy"; $(GO) mod tidy -diff; exit 1; }
	@echo "tidy: ok"

# Локальный гейт (то же, что CI).
ci: build test lint tidy-check

# Демо: поднять локальный стенд и прогнать сквозной сценарий.
demo:
	docker compose -f examples/demo/docker-compose.yml up -d
	$(GO) build -o omnichannel-configserver-mcp .
	python3 examples/demo/demo.py

# E2E: то же плюс реальный config-agent, исполняющий задачи деплоя.
e2e:
	docker compose -f examples/demo/docker-compose.yml up -d
	$(GO) build -o omnichannel-configserver-mcp .
	python3 examples/demo/e2e.py

demo-down:
	docker compose -f examples/demo/docker-compose.yml down -v
