.PHONY: help install test lint fmt smoke clean build publish release tag

PYTHON_MIN := 3.11

help:  ## 사용 가능한 타깃 목록
	@grep -E '^[a-zA-Z_-]+:.*?## .*$$' $(MAKEFILE_LIST) | \
		awk 'BEGIN {FS=":.*?## "}; {printf "  \033[36m%-12s\033[0m %s\n", $$1, $$2}'

install:  ## 개발 의존성 동기화
	uv sync --extra dev

test:  ## pytest 실행
	uv run pytest -q

lint:  ## ruff 린트
	uv run ruff check src/ tests/

fmt:  ## ruff format + import 정렬
	uv run ruff format src/ tests/
	uv run ruff check --fix src/ tests/

smoke:  ## 실 카카오 API 로 7개 도구 핑 테스트 (인증 필요)
	uv run kakao-moment-mcp-test smoke

clean:  ## 빌드 산출물 제거
	rm -rf dist/ build/ *.egg-info src/*.egg-info

build: clean  ## wheel + sdist 빌드 (dist/ 생성)
	uv build

publish: build  ## PyPI 게시. keyring 또는 UV_PUBLISH_TOKEN 자동 감지
	@echo "📦 빌드 산출물:"
	@ls -la dist/
	@echo ""
	@if [ -n "$$UV_PUBLISH_TOKEN" ]; then \
		echo "🔑 환경변수 UV_PUBLISH_TOKEN 사용"; \
		echo "🚀 게시 시작..."; \
		uv publish; \
	elif command -v keyring >/dev/null 2>&1 && \
	     TOKEN=$$(keyring get https://upload.pypi.org/legacy/ __token__ 2>/dev/null) && \
	     [ -n "$$TOKEN" ]; then \
		echo "🔑 keyring 에서 토큰 자동 로드 (macOS Keychain)"; \
		echo "🚀 게시 시작..."; \
		UV_PUBLISH_TOKEN="$$TOKEN" uv publish; \
	else \
		echo "❌ PyPI 토큰을 찾을 수 없습니다."; \
		echo ""; \
		echo "다음 중 하나를 선택하세요:"; \
		echo ""; \
		echo "  📌 한 번만 설정 — keyring (추천, OS 키체인 암호화)"; \
		echo "     uv pip install --system keyring"; \
		echo "     keyring set https://upload.pypi.org/legacy/ __token__"; \
		echo "     # 프롬프트에 'pypi-AgEI...' 토큰 붙여넣기 → 끝"; \
		echo "     # 이후로는 make publish 만 치면 됨"; \
		echo ""; \
		echo "  📌 매번 — 인라인"; \
		echo "     UV_PUBLISH_TOKEN='pypi-AgEI...' make publish"; \
		echo ""; \
		exit 1; \
	fi
	@echo ""
	@echo "✅ 게시 완료: https://pypi.org/project/kakao-moment-mcp/"

release: lint test publish  ## lint + test 전부 통과 후 publish

tag:  ## 현재 pyproject 의 version 으로 git tag + push
	@VERSION=$$(grep -E '^version = ' pyproject.toml | head -1 | sed -E 's/version = "(.*)"/\1/'); \
		echo "📌 태깅: v$$VERSION"; \
		git tag "v$$VERSION" && git push origin "v$$VERSION"
