# Load local secrets/config when present; .env is ignored by Git.
-include .env

REGISTRY ?= git.ipao.vip
IMAGE_REPOSITORY ?= rogee/wxapp-guantong
IMAGE_NAME ?= $(REGISTRY)/$(IMAGE_REPOSITORY)
IMAGE_TAG ?= latest
IMAGE ?= $(IMAGE_NAME):$(IMAGE_TAG)

DEPLOY_HOST ?= server.gaozong.ali
DEPLOY_DIR ?= dist
DEPLOY_ARCHIVE ?= $(DEPLOY_DIR)/$(subst /,_,$(IMAGE_NAME))-$(IMAGE_TAG).tar.gz
DEPLOY_REMOTE_ARCHIVE ?= /tmp/$(notdir $(DEPLOY_ARCHIVE))

DOCKERFILE ?= backend/Dockerfile
BUILD_CONTEXT ?= backend
PLATFORM ?= linux/amd64

DOCKER_REGISTRY ?= docker.m.daocloud.io
ALPINE_MIRROR ?= mirrors.aliyun.com
GOPROXY ?= https://goproxy.cn,direct
GOSUMDB ?= sum.golang.google.cn

MINIPROGRAM_CI ?= miniprogram-ci
MINIPROGRAM_PATH ?= uniapp/unpackage/dist/build/mp-weixin
MINIPROGRAM_NORMALIZER ?= scripts/normalize-miniprogram-paths.py
WECHAT_APPID ?= $(or $(APP_ID),wx0a0e45ada30f01d4)
WECHAT_PRIVATE_KEY ?= $(HOME)/.secrets/wechat/private.$(WECHAT_APPID).key
WECHAT_VERSION ?= auto
WECHAT_VERSION_FALLBACK ?= 1.0.2
# ponytail: local state; override WECHAT_VERSION when another machine uploads.
WECHAT_VERSION_STATE ?= .cache/wechat-version
WECHAT_VERSION_SCRIPT ?= scripts/wechat-next-version.mjs
WECHAT_ROBOT ?= 1

export WECHAT_APPID WECHAT_VERSION_FALLBACK
WECHAT_UPLOAD_DESCRIPTION ?= 骨安通生产版本

.PHONY: docker-build docker-push docker-release miniapp-normalize miniapp-upload deploy compose-up compose-down

docker-build:
	docker build \
		--platform $(PLATFORM) \
		--build-arg DOCKER_REGISTRY=$(DOCKER_REGISTRY) \
		--build-arg ALPINE_MIRROR=$(ALPINE_MIRROR) \
		--build-arg GOPROXY=$(GOPROXY) \
		--build-arg GOSUMDB=$(GOSUMDB) \
		-t $(IMAGE) \
		-f $(DOCKERFILE) \
		$(BUILD_CONTEXT)

docker-push:
	docker push $(IMAGE)

docker-release: docker-build docker-push

miniapp-normalize:
	python3 "$(MINIPROGRAM_NORMALIZER)" "$(MINIPROGRAM_PATH)"

miniapp-upload: miniapp-normalize
	test -f "$(WECHAT_PRIVATE_KEY)"
	test -f "$(MINIPROGRAM_PATH)/project.config.json"
	@set -eu; \
	if [ "$(WECHAT_VERSION)" = "auto" ]; then \
		if [ -s "$(WECHAT_VERSION_STATE)" ]; then \
			current="$$(cat "$(WECHAT_VERSION_STATE)")"; \
			version="$$(node "$(WECHAT_VERSION_SCRIPT)" "$$current")"; \
		else \
			version="$(WECHAT_VERSION_FALLBACK)"; \
		fi; \
	else \
		version="$(WECHAT_VERSION)"; \
	fi; \
	printf '上传小程序版本: %s\n' "$$version"; \
	$(MINIPROGRAM_CI) upload \
		--pp "$(MINIPROGRAM_PATH)" \
		--pkp "$(WECHAT_PRIVATE_KEY)" \
		--appid "$(WECHAT_APPID)" \
		--uv "$$version" \
		--ud "$(WECHAT_UPLOAD_DESCRIPTION)" \
		-r "$(WECHAT_ROBOT)"; \
	mkdir -p "$$(dirname "$(WECHAT_VERSION_STATE)")"; \
	printf '%s\n' "$$version" > "$(WECHAT_VERSION_STATE)"

deploy: docker-build
	mkdir -p $(DEPLOY_DIR)
	docker save $(IMAGE) | gzip > $(DEPLOY_ARCHIVE)
	scp $(DEPLOY_ARCHIVE) $(DEPLOY_HOST):$(DEPLOY_REMOTE_ARCHIVE)
	ssh $(DEPLOY_HOST) 'docker load -i $(DEPLOY_REMOTE_ARCHIVE) && rm -f $(DEPLOY_REMOTE_ARCHIVE)'

compose-up:
	GUAHAO_IMAGE="$(IMAGE)" docker compose up -d

compose-down:
	docker compose down
