# idsync — 飞书 → OpenLDAP 同步器
# 宿主未安装 Go，所有 Go 操作都在 podman 容器内执行。
# 注意：容器必须 --network=host，否则容器内的 127.0.0.1 指向容器自身，无法访问宿主代理。

GO_IMAGE   := docker.io/library/golang:1.26-trixie
NODE_IMAGE := docker.io/library/node:20-alpine
PROXY      := http://127.0.0.1:10808

PODMAN := podman run --rm --pull=never --network=host \
	-e http_proxy=$(PROXY) -e https_proxy=$(PROXY) \
	-v $(PWD):/app -w /app \
	-v idsync-gomod:/go/pkg/mod \
	-v idsync-gocache:/root/.cache/go-build

.PHONY: default
default: help

.PHONY: deps
deps:
	$(PODMAN) $(GO_IMAGE) go mod download
	$(PODMAN) $(GO_IMAGE) go mod tidy

.PHONY: build
build:
	$(PODMAN) -e CGO_ENABLED=0 $(GO_IMAGE) go build -trimpath -o bin/idsync .

.PHONY: test
test:
	$(PODMAN) $(GO_IMAGE) go test ./...

.PHONY: vet
vet:
	$(PODMAN) $(GO_IMAGE) go vet ./...

# 集成测试对真实 OpenLDAP 运行；容器内需能访问宿主的 slapd，
# 因此用 host.containers.internal 并放行 no_proxy，避免流量被代理拦走。
LDAP_TEST ?= ldap://host.containers.internal:3899

.PHONY: test-integration
test-integration:
	podman run --rm --pull=never --network=host \
		--add-host host.containers.internal:host-gateway \
		-e no_proxy=127.0.0.1,localhost,host.containers.internal \
		-e NO_PROXY=127.0.0.1,localhost,host.containers.internal \
		-e LDAP_TEST_URL=$(LDAP_TEST) \
		-v $(PWD):/app -w /app \
		-v idsync-gomod:/go/pkg/mod \
		-v idsync-gocache:/root/.cache/go-build \
		$(GO_IMAGE) go test -tags=integration ./internal/... -v

.PHONY: fmt
fmt:
	$(PODMAN) $(GO_IMAGE) gofmt -l -w .

.PHONY: css
css:
	sh scripts/build-webui.sh

.PHONY: run
run:
	$(PODMAN) $(GO_IMAGE) go run . -config config.yml

.PHONY: shell
shell:
	podman run --rm -it --network=host \
		-e http_proxy=$(PROXY) -e https_proxy=$(PROXY) \
		-v $(PWD):/app -w /app \
		-v idsync-gomod:/go/pkg/mod \
		-v idsync-gocache:/root/.cache/go-build \
		$(GO_IMAGE) bash

.PHONY: clean
clean:
	rm -rf bin

.PHONY: help
help:
	@echo "目标:"
	@echo "  deps   下载并整理 Go 依赖"
	@echo "  build  构建 bin/idsync"
	@echo "  test   运行单元测试"
	@echo "  test-integration  对真实 OpenLDAP 运行集成测试"
	@echo "  vet    go vet"
	@echo "  fmt    格式化"
	@echo "  css    构建 WebUI 样式（node 容器）"
	@echo "  run    本地运行"
	@echo "  shell  进入构建容器"
	@echo "  clean  清理产物"
