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

PYTHON_MIN := 3.11
VERSION ?=

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

set-version:  ## VERSION=x.y.z 로 pyproject.toml/uv.lock 버전 갱신
	@if [ -z "$(VERSION)" ]; then \
		echo "VERSION 이 비어 있어 버전을 변경하지 않습니다."; \
	else \
		echo "🔖 버전 갱신: $(VERSION)"; \
		python -c "from pathlib import Path; import re; p=Path('pyproject.toml'); s=p.read_text(); ns,n=re.subn(r'^version = \"[^\"]+\"', 'version = \"$(VERSION)\"', s, count=1, flags=re.M); p.write_text(ns); raise SystemExit(0 if n == 1 else 'pyproject.toml version 필드를 찾지 못했습니다')"; \
		uv lock; \
	fi

build: set-version clean  ## wheel + sdist 빌드 (dist/ 생성). VERSION=x.y.z 로 버전 주입 가능
	uv build

publish: build  ## PyPI 게시. VERSION=x.y.z 로 버전 주입 가능
	@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 VERSION=0.1.8"; \
		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"
