# idsync — 飞书 → SQLite → LLDAP 同步器
# 宿主未安装 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 ./...

# 集成测试对真实 LLDAP 运行（LDAP 3890 / GraphQL 17170），先 `make lldap` 起容器。
LDAP_TEST ?= ldap://127.0.0.1:3890
LLDAP_GQL ?= http://127.0.0.1:17170

.PHONY: lldap
lldap:
	podman run -d --name idsync-lldap \
		-e LLDAP_LDAP_BASE_DN=dc=example,dc=com \
		-e LLDAP_JWT_SECRET='change-me-jwt-secret-please' \
		-e LLDAP_LDAP_USER_PASS=adminpass \
		-p 3890:3890 -p 17170:17170 \
		ghcr.io/lldap/lldap:stable

.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  清理产物"
