SHELL   := /bin/bash
PKG     := everos-cloud
VERSION := $(shell grep '^version' pyproject.toml | head -1 | cut -d'"' -f2)

# 凭证检查函数：优先 ~/.pypirc，其次 TWINE_PASSWORD 环境变量
define check-creds
	@if ! grep -q '\[$(1)\]' ~/.pypirc 2>/dev/null && [ -z "$$TWINE_PASSWORD" ]; then \
	  echo "⚠  未检测到 $(1) 凭证，twine 将交互式提示输入"; \
	  echo "   推荐：在 ~/.pypirc 配置 [$(1)] 段，或设置 TWINE_PASSWORD 环境变量"; \
	fi
endef

.DEFAULT_GOAL := help

.PHONY: help check-name build publish-test publish clean bump

help:
	@echo "$(PKG) v$(VERSION)"
	@echo ""
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
	  awk 'BEGIN {FS=":.*?## "}; {printf "  \033[36m%-15s\033[0m %s\n", $$1, $$2}'

check-name: ## 检查包名在 PyPI 是否可用
	@STATUS=$$(curl -s -o /dev/null -w "%{http_code}" "https://pypi.org/pypi/$(PKG)/json"); \
	if [ "$$STATUS" = "200" ]; then \
	  echo "❌ '$(PKG)' 已被占用: https://pypi.org/project/$(PKG)/"; \
	else \
	  echo "✅ '$(PKG)' 可用"; \
	fi

build: clean ## 构建 wheel + sdist，并检查元数据
	python3 -m build
	python3 -m twine check dist/*
	@echo ""
	@ls -lh dist/

publish-test: build ## 上传到 TestPyPI
	$(call check-creds,testpypi)
	python3 -m twine upload --repository testpypi dist/*
	@echo ""
	@echo "✅ https://test.pypi.org/project/$(PKG)/"
	@echo "安装: pip install -i https://test.pypi.org/simple/ $(PKG)"

publish: build ## 上传到正式 PyPI（双重确认）
	$(call check-creds,pypi)
	@echo "⚠  即将发布 $(PKG)==$(VERSION) 到 PyPI，上传后无法撤销"
	@read -r -p "确认上传? (y/n) " c1 && [[ "$$c1" =~ ^[Yy]$$ ]] || exit 1
	@read -r -p "再次确认 (y/n) " c2 && [[ "$$c2" =~ ^[Yy]$$ ]] || exit 1
	python3 -m twine upload dist/*
	@echo ""
	@echo "✅ https://pypi.org/project/$(PKG)/"
	@echo "安装: pip install $(PKG)"

clean: ## 删除构建产物
	rm -rf dist/ build/ *.egg-info src/*.egg-info

bump: ## 自动递增 patch 版本（0.1.0 → 0.1.1）
	@OLD=$(VERSION); \
	PATCH=$$(echo $$OLD | cut -d. -f3); \
	NEW=$$(echo $$OLD | sed "s/\.$${PATCH}$$/.$$((PATCH+1))/"); \
	sed -i '' "s/^version = \"$$OLD\"/version = \"$$NEW\"/" pyproject.toml; \
	find src -name '__init__.py' -exec \
	  sed -i '' "s/__version__ = \"$$OLD\"/__version__ = \"$$NEW\"/" {} \; ; \
	echo "版本: $$OLD → $$NEW"
