# Issue Core Capability Makefile
# Universal CLI for issue tracking across multiple backends

# Capability metadata
CAPABILITY_NAME := issue-core
CAPABILITY_DESCRIPTION := Universal CLI for issue tracking across multiple backends

# Default target
.PHONY: help
help: ## Show issue core capability help
	@echo "🎯 Issue Core - Universal Issue Tracking CLI"
	@echo "==============================================="
	@echo ""
	@echo "Core Issue Operations:"
	@echo "  issue-list                   List all issues from configured backend"
	@echo "  issue-show ID=42             Show details for issue #42"
	@echo "  issue-create TITLE=\"Bug\"     Create new issue with title"
	@echo "  issue-close ID=42            Close issue #42"
	@echo "  issue-stats                  Show issue statistics"
	@echo ""
	@echo "Backend Management:"
	@echo "  issue-backend-list           List configured backends"
	@echo "  issue-backend-detect         Auto-detect backend from repository"
	@echo "  issue-backend-set-local      Configure local SQLite backend"
	@echo "  issue-backend-set-gitea      Configure Gitea backend"
	@echo ""
	@echo "Synchronization:"
	@echo "  issue-sync                   Sync with remote backend"
	@echo "  issue-sync-pull              Pull issues from remote"
	@echo "  issue-sync-push              Push local issues to remote"
	@echo ""
	@echo "Development & Setup (local):"
	@echo "  install                      Install issue core for local development"
	@echo "  install-dev                  Install with development dependencies"
	@echo "  test                         Run all tests"
	@echo "  test-unit                    Run unit tests only"
	@echo "  test-integration             Run integration tests only"
	@echo "  test-cov                     Run tests with coverage report"
	@echo "  test-verbose                 Run tests with verbose output"
	@echo "  package                      Build source and wheel distributions"
	@echo "  package-check                Build and validate distributions"
	@echo "  publish-gitea                Publish distributions to Gitea PyPI"
	@echo ""
	@echo "Feedback & Continuous Improvement:"
	@echo "  feedback MSG=\"...\"            Submit feedback about issue-core"
	@echo "  feedback-list                List pending feedback"
	@echo "  feedback-stats               Show feedback statistics"
	@echo "  feedback-show FILE=\"...\"      Show specific feedback"
	@echo "  feedback-review FILE=\"...\"    Review feedback (maintainers)"
	@echo ""
	@echo "Development & Setup (from parent):"
	@echo "  issue-core-install         Install issue core capability"
	@echo "  issue-core-install-dev     Install with development dependencies"
	@echo "  issue-core-test            Run issue core tests"
	@echo "  issue-core-test-cov        Run tests with coverage report"
	@echo "  issue-core-lint            Run code quality checks"
	@echo "  issue-core-clean           Clean build artifacts"
	@echo ""
	@echo "CLI Functionality:"
	@echo "  issue-core-help            Show CLI help documentation"
	@echo "  issue-core-demo            Demonstrate facade functionality"

# Check if issue command is available
ISSUE_CLI := $(shell command -v issue 2> /dev/null)

PYTHON ?= python3
GITEA_PACKAGE_OWNER ?= coulomb
GITEA_PYPI_REPOSITORY_URL ?= https://gitea.coulomb.social/api/packages/$(GITEA_PACKAGE_OWNER)/pypi

# Core Issue Operations
.PHONY: issue-list
issue-list: ## List all issues from configured backend
ifndef ISSUE_CLI
	@echo "❌ Issue facade not installed"
	@echo "   Install with: make issue-core-install"
	@exit 1
endif
	issue list

.PHONY: issue-show
issue-show: ## Show details for specific issue (requires ID=number)
ifndef ID
	@echo "❌ ID is required. Usage: make issue-show ID=42"
	@exit 1
endif
ifndef ISSUE_CLI
	@echo "❌ Issue facade not installed"
	@exit 1
endif
	issue show $(ID)

.PHONY: issue-create
issue-create: ## Create new issue (requires TITLE="Issue Title")
ifndef TITLE
	@echo "❌ TITLE is required. Usage: make issue-create TITLE=\"Bug in parser\""
	@exit 1
endif
ifndef ISSUE_CLI
	@echo "❌ Issue facade not installed"
	@exit 1
endif
	issue create "$(TITLE)"

.PHONY: issue-close
issue-close: ## Close issue (requires ID=number)
ifndef ID
	@echo "❌ ID is required. Usage: make issue-close ID=42"
	@exit 1
endif
ifndef ISSUE_CLI
	@echo "❌ Issue facade not installed"
	@exit 1
endif
	issue close $(ID)

.PHONY: issue-stats
issue-stats: ## Show issue statistics
ifndef ISSUE_CLI
	@echo "❌ Issue facade not installed"
	@exit 1
endif
	issue stats

# Backend Management
.PHONY: issue-backend-list
issue-backend-list: ## List configured backends
ifndef ISSUE_CLI
	@echo "❌ Issue facade not installed"
	@exit 1
endif
	issue backend list

.PHONY: issue-backend-detect
issue-backend-detect: ## Auto-detect backend from repository
ifndef ISSUE_CLI
	@echo "❌ Issue facade not installed"
	@exit 1
endif
	issue config detect

.PHONY: issue-backend-set-local
issue-backend-set-local: ## Configure local SQLite backend
ifndef ISSUE_CLI
	@echo "❌ Issue facade not installed"
	@exit 1
endif
	issue backend set local

.PHONY: issue-backend-set-gitea
issue-backend-set-gitea: ## Configure Gitea backend (requires REPO=repository-name)
ifndef ISSUE_CLI
	@echo "❌ Issue facade not installed"
	@exit 1
endif
ifdef REPO
	issue backend add gitea $(REPO)
else
	issue backend set gitea
endif

# Synchronization
.PHONY: issue-sync
issue-sync: ## Sync with remote backend
ifndef ISSUE_CLI
	@echo "❌ Issue facade not installed"
	@exit 1
endif
	issue sync

.PHONY: issue-sync-pull
issue-sync-pull: ## Pull issues from remote
ifndef ISSUE_CLI
	@echo "❌ Issue facade not installed"
	@exit 1
endif
	issue sync pull

.PHONY: issue-sync-push
issue-sync-push: ## Push local issues to remote
ifndef ISSUE_CLI
	@echo "❌ Issue facade not installed"
	@exit 1
endif
	issue sync push

# Development and Setup
.PHONY: integrate
integrate: ## Integrate capability into main project (interactive)
	@./.capability/integrate.sh

.PHONY: install
install: ## Install issue core (local development)
	pip install -e .

.PHONY: install-dev
install-dev: ## Install with development dependencies (local development)
	pip install -e ".[dev]"

.PHONY: test
test: ## Run all tests (local development)
	pytest tests/

.PHONY: test-unit
test-unit: ## Run unit tests only (local development)
	pytest tests/ -m unit -v

.PHONY: test-integration
test-integration: ## Run integration tests only (local development)
	pytest tests/ -m integration -v

.PHONY: test-cov
test-cov: ## Run tests with coverage report (local development)
	pytest tests/ --cov=issue_core --cov-report=html --cov-report=term

.PHONY: test-verbose
test-verbose: ## Run tests with verbose output (local development)
	pytest tests/ -v

.PHONY: clean-dist
clean-dist: ## Remove local Python package build artifacts
	rm -rf build/ dist/ *.egg-info/

.PHONY: package
package: clean-dist ## Build source and wheel distributions
	$(PYTHON) -m build

.PHONY: package-check
package-check: package ## Build and validate source/wheel distributions
	$(PYTHON) -m twine check dist/*

.PHONY: publish-gitea
publish-gitea: package-check ## Publish distributions to the Coulomb Gitea PyPI registry
ifndef TWINE_USERNAME
	$(error TWINE_USERNAME is required)
endif
ifndef TWINE_PASSWORD
	$(error TWINE_PASSWORD is required)
endif
	$(PYTHON) -m twine upload --repository-url "$(GITEA_PYPI_REPOSITORY_URL)" dist/*

# Feedback and Continuous Improvement
.PHONY: feedback
feedback: ## Submit feedback (Usage: make feedback MSG="your feedback")
	@./.capability/feedback submit "$(MSG)"

.PHONY: feedback-list
feedback-list: ## List pending feedback
	@./.capability/feedback list

.PHONY: feedback-stats
feedback-stats: ## Show feedback statistics
	@./.capability/feedback stats

.PHONY: feedback-show
feedback-show: ## Show specific feedback (Usage: make feedback-show FILE=20251217-xxx.md)
	@./.capability/feedback show "$(FILE)"

.PHONY: feedback-review
feedback-review: ## Review feedback (Usage: make feedback-review FILE=20251217-xxx.md)
	@./.capability/feedback review "$(FILE)"

.PHONY: feedback-review-issue
feedback-review-issue: ## Review feedback and create issue (Usage: make feedback-review-issue FILE=20251217-xxx.md)
	@./.capability/feedback review "$(FILE)" --create-issue

.PHONY: issue-core-install
issue-core-install: ## Install issue core capability
	pip install -e capabilities/issue-core/

.PHONY: issue-core-install-dev
issue-core-install-dev: ## Install issue core capability with development dependencies
	pip install -e "capabilities/issue-core/[dev]"

.PHONY: issue-core-test
issue-core-test: ## Run issue core tests
	cd capabilities/issue-core && pytest tests/

.PHONY: issue-core-test-cov
issue-core-test-cov: ## Run tests with coverage report
	cd capabilities/issue-core && pytest tests/ --cov=issue_core --cov-report=html --cov-report=term

.PHONY: issue-core-lint
issue-core-lint: ## Run code quality checks
	@echo "🔍 Running code quality checks for issue-core..."
	cd capabilities/issue-core && python -m py_compile cli/*.py core/*.py backends/*/*.py 2>/dev/null || echo "⚠️  Some files may not compile due to missing dependencies"
	@echo "✅ Code quality checks completed"

.PHONY: issue-core-clean
issue-core-clean: ## Clean build artifacts
	cd capabilities/issue-core && rm -rf build/ dist/ *.egg-info/ __pycache__/ .pytest_cache/ htmlcov/ .coverage
	find capabilities/issue-core -name "*.pyc" -delete
	find capabilities/issue-core -name "__pycache__" -type d -exec rm -rf {} + 2>/dev/null || true

# CLI Functionality
.PHONY: issue-core-help
issue-core-help: ## Show CLI help documentation
ifndef ISSUE_CLI
	@echo "❌ Issue facade not installed"
	@echo "   Install with: make issue-core-install"
	@exit 1
endif
	issue --help

.PHONY: issue-core-demo
issue-core-demo: ## Demonstrate facade functionality
	@echo "🎬 Issue Core Demonstration"
	@echo "============================="
	@echo ""
	@echo "The Issue Core provides a unified CLI for issue tracking across:"
	@echo "  • GitHub Issues"
	@echo "  • GitLab Issues"
	@echo "  • Gitea Issues"
	@echo "  • Local SQLite storage"
	@echo ""
	@echo "Key features:"
	@echo "  • Repository-aware backend detection"
	@echo "  • Offline capability with sync"
	@echo "  • Consistent CLI across all platforms"
	@echo ""
ifndef ISSUE_CLI
	@echo "To try it out:"
	@echo "  1. make issue-core-install"
	@echo "  2. make issue-backend-detect"
	@echo "  3. make issue-list"
else
	@echo "Current backend status:"
	@$(MAKE) --no-print-directory issue-backend-list 2>/dev/null || echo "  No backends configured yet"
	@echo ""
	@echo "Try: make issue-backend-detect"
endif

# Repository Integration
.PHONY: issue-detect-repo
issue-detect-repo: ## Detect and configure backend for current repository
	@echo "🔍 Analyzing repository for issue tracking configuration..."
	@if [ -d .git ]; then \
		echo "✅ Git repository detected"; \
		if git remote -v 2>/dev/null | grep -q github; then \
			echo "🐙 GitHub remote detected"; \
		elif git remote -v 2>/dev/null | grep -q gitlab; then \
			echo "🦊 GitLab remote detected"; \
		elif git remote -v 2>/dev/null | grep -q gitea; then \
			echo "🦋 Gitea remote detected"; \
		else \
			echo "📁 Generic git repository - local backend recommended"; \
		fi; \
	else \
		echo "❌ Not a git repository"; \
	fi
	@echo ""
	@echo "Run 'make issue-backend-detect' to auto-configure"

# Advanced Operations
.PHONY: issue-export
issue-export: ## Export issues to backup file (requires FILE=backup.json)
ifndef ISSUE_CLI
	@echo "❌ Issue facade not installed"
	@exit 1
endif
ifdef FILE
	issue export "$(FILE)"
else
	@echo "❌ FILE is required. Usage: make issue-export FILE=backup.json"
	@exit 1
endif

.PHONY: issue-import
issue-import: ## Import issues from backup file (requires FILE=backup.json)
ifndef ISSUE_CLI
	@echo "❌ Issue facade not installed"
	@exit 1
endif
ifdef FILE
	issue import "$(FILE)"
else
	@echo "❌ FILE is required. Usage: make issue-import FILE=backup.json"
	@exit 1
endif

# Meta information for capability discovery
.PHONY: capability-info
capability-info: ## Show capability information
	@echo "Name: $(CAPABILITY_NAME)"
	@echo "Description: $(CAPABILITY_DESCRIPTION)"
	@echo "Type: CLI application with backend facade pattern"
	@echo "Main command: issue"
	@echo "Supported backends: Local SQLite, GitHub, GitLab, Gitea"
	@echo "Key features: Repository-aware, offline-capable, unified interface"
	@echo "Targets:"
	@$(MAKE) --no-print-directory help | grep "^  " | sed 's/^  /    /'
