.PHONY: build test up down reset deploy logs logs-node1 logs-node2 logs-node3 \
        status peer-ids rebuild docker-clean test-local

# ── Сборка ───────────────────────────────────────────────────────────────────

build:
	go build -o bin/node$(EXE)   ./cmd/node
	go build -o bin/client$(EXE) ./cmd/client
	go build -o bin/wallet$(EXE) ./cmd/wallet
	go build -o bin/peerid$(EXE) ./cmd/peerid

test:
	go test ./...

# ── Docker: запуск / остановка ───────────────────────────────────────────────

## Собрать образ и запустить все три ноды
up:
	docker compose up --build -d
	@printf "\n  Explorer  →  http://localhost:8081\n"
	@printf "  node2     →  http://localhost:8082\n"
	@printf "  node3     →  http://localhost:8083\n\n"
	@printf "  Задеплоить контракты: make deploy\n\n"

## Остановить ноды (данные сохраняются)
down:
	docker compose down

## Полный сброс: остановить + удалить тома с данными
reset:
	docker compose down -v
	@printf "\n  Данные удалены. Запустите 'make up' для чистого старта.\n\n"

## Задеплоить 4 production-контракта
deploy:
	docker compose --profile deploy run --rm deploy

# ── Логи ─────────────────────────────────────────────────────────────────────

logs:
	docker compose logs -f

logs-node1:
	docker compose logs -f node1

logs-node2:
	docker compose logs -f node2

logs-node3:
	docker compose logs -f node3

# ── Статус ───────────────────────────────────────────────────────────────────

status:
	@printf "\n── Контейнеры ──────────────────────────────────────────\n"
	docker compose ps
	@printf "\n── Сети ────────────────────────────────────────────────\n"
	docker network ls | grep dchain || true
	@printf "\n── Backbone IP-адреса ──────────────────────────────────\n"
	@docker inspect -f '{{.Name}}  {{range .NetworkSettings.Networks}}{{.IPAddress}}{{end}}' \
		node1 node2 node3 2>/dev/null | grep 172.30 || true
	@printf "\n"

# ── Peer IDs ─────────────────────────────────────────────────────────────────

## Показать peer ID и backbone multiaddr для всех нод
peer-ids: build
	@printf "\n── node1 ────────────────────────────────────────────────\n"
	bin/peerid$(EXE) --key testdata/node1.json --ip 172.30.0.11 --port 4001
	@printf "\n── node2 ────────────────────────────────────────────────\n"
	bin/peerid$(EXE) --key testdata/node2.json --ip 172.30.0.12 --port 4001
	@printf "\n── node3 ────────────────────────────────────────────────\n"
	bin/peerid$(EXE) --key testdata/node3.json --ip 172.30.0.13 --port 4001
	@printf "\n"

# ── Docker: служебные ────────────────────────────────────────────────────────

rebuild:
	docker compose build --no-cache
	docker compose up -d

docker-clean:
	docker compose down -v --rmi local

# ── Локальный тест (одна нода) ────────────────────────────────────────────────

test-local: build
	@rm -rf /tmp/testchain
	MSYS_NO_PATHCONV=1 bin/node$(EXE) \
		--genesis --db /tmp/testchain --key testdata/node1.json \
		--listen /ip4/0.0.0.0/tcp/4001 &
	@sleep 8 && kill $$(pgrep -f "bin/node") 2>/dev/null || true
	@echo "--- chain info ---"
	bin/client$(EXE) info --db /tmp/testchain
