UV ?= uv
PROJECT_DIR ?= .

.PHONY: run check format install clean publish

run: install
	$(UV) run clipbox

format:
	$(UV) run ruff format $(PROJECT_DIR)

check:
	$(UV) run ruff check --fix --select I,F,UP,B $(PROJECT_DIR)
	$(UV) run ty check $(PROJECT_DIR)

install: clean format check
	$(UV) sync

clean:
	find $(PROJECT_DIR) -type d -name "__pycache__" -exec rm -rf {} + 2>/dev/null || true
	find $(PROJECT_DIR) -type f -name "*.py[co]" -delete 2>/dev/null || true
	rm -rf $(PROJECT_DIR)/.ruff_cache $(PROJECT_DIR)/.ty_cache $(PROJECT_DIR)/.mypy_cache $(PROJECT_DIR)/.pyright $(PROJECT_DIR)/.eggs 2>/dev/null || true
	rm -rf $(PROJECT_DIR)/dist $(PROJECT_DIR)/build $(PROJECT_DIR)/*.egg-info 2>/dev/null || true
	rm -rf $(PROJECT_DIR)/.pytest_cache $(PROJECT_DIR)/.coverage* $(PROJECT_DIR)/htmlcov 2>/dev/null || true

publish:
	@CURRENT_VERSION=$$($(UV) version --short); \
	echo "Current version: $$CURRENT_VERSION"; \
	read -p "Enter new version (or press Enter to keep current): " NEW_VERSION; \
	VERSION_CHANGED=0; \
	if [ -n "$$NEW_VERSION" ] && [ "$$NEW_VERSION" != "$$CURRENT_VERSION" ]; then \
		echo "Updating version to $$NEW_VERSION..."; \
		$(UV) version "$$NEW_VERSION"; \
		VERSION_CHANGED=1; \
	elif [ -n "$$NEW_VERSION" ] && [ "$$NEW_VERSION" = "$$CURRENT_VERSION" ]; then \
		echo "Version unchanged (same as current)."; \
	else \
		echo "Using current version: $$CURRENT_VERSION"; \
	fi; \
	$(MAKE) install; \
	$(UV) build; \
	$(UV) publish; \
	if [ "$$VERSION_CHANGED" -eq 1 ]; then \
		echo "Committing version changes..."; \
		git add pyproject.toml uv.lock; \
		git commit -m "Release $$NEW_VERSION"; \
		echo "Pushing to remote..."; \
		git push origin HEAD; \
	else \
		echo "No version change; skipping commit and push."; \
	fi
