# Makefile for PDD Prompt Linter
# This Makefile was generated by an LLM (Claude) after being given the README.md context
# It automates the PDD workflow for building and maintaining this project

.PHONY: help architecture pddrc setup prompts sync-all sync-foundation sync-core sync-interfaces clean test

# Default target - show available commands
help:
	@echo "PDD Prompt Linter - Development Commands"
	@echo ""
	@echo "Setup & Architecture:"
	@echo "  make architecture    - Generate architecture.json from specs"
	@echo "  make pddrc          - Generate .pddrc configuration"
	@echo "  make setup          - Create directory structure"
	@echo ""
	@echo "Prompt Generation:"
	@echo "  make prompts        - Generate all prompt files in dependency order"
	@echo ""
	@echo "Code Generation (pdd sync):"
	@echo "  make sync-all       - Run pdd sync on all modules in dependency order"
	@echo "  make sync-foundation - Sync foundation modules only (models, helpers)"
	@echo "  make sync-core      - Sync core modules (rules, llm, fix, report, pipeline)"
	@echo "  make sync-interfaces - Sync interface modules (cli, backend, frontend)"
	@echo ""
	@echo "Testing:"
	@echo "  make test           - Run all tests"
	@echo ""
	@echo "Cleanup:"
	@echo "  make clean          - Remove generated files (keeps prompts and architecture)"

# Step 2: Generate architecture.json from specification documents
architecture:
	@echo "Generating architecture.json from specs..."
	pdd --force generate --template architecture/architecture_json \
		-e PRD_FILE=docs/specs.md \
		-e TECH_STACK_FILE=docs/tech_stack.md \
		--output architecture.json
	@echo "✓ architecture.json generated"

# Step 3: Generate .pddrc configuration
pddrc:
	@echo "Generating .pddrc configuration..."
	pdd generate --template generic/generate_pddrc \
		-e ARCHITECTURE_FILE=architecture.json \
		--output .pddrc
	@echo "✓ .pddrc generated"

# Step 3: Create directory structure
setup:
	@echo "Creating directory structure..."
	mkdir -p src/utils src/cli src/backend src/frontend prompts tests examples
	@echo "✓ Directories created"

# Step 4: Generate all prompts in dependency order
prompts: prompt-models prompt-helpers prompt-rules prompt-llm prompt-fix prompt-report prompt-pipeline prompt-cli prompt-backend prompt-frontend
	@echo "✓ All prompts generated"

# Individual prompt generation targets
prompt-models:
	@echo "Generating models prompt..."
	pdd --force generate --template generic/generate_prompt \
		-e MODULE=models \
		-e LANG_OR_FRAMEWORK=python \
		-e ARCHITECTURE_FILE=architecture.json \
		-e PRD_FILE=docs/specs.md \
		-e TECH_STACK_FILE=docs/tech_stack.md \
		--output prompts/models_python.prompt

prompt-helpers:
	@echo "Generating helpers prompt..."
	pdd --force generate --template generic/generate_prompt \
		-e MODULE=helpers \
		-e LANG_OR_FRAMEWORK=python \
		-e ARCHITECTURE_FILE=architecture.json \
		-e PRD_FILE=docs/specs.md \
		-e TECH_STACK_FILE=docs/tech_stack.md \
		--output prompts/helpers_python.prompt

prompt-rules:
	@echo "Generating rules prompt..."
	pdd --force generate --template generic/generate_prompt \
		-e MODULE=rules \
		-e LANG_OR_FRAMEWORK=python \
		-e ARCHITECTURE_FILE=architecture.json \
		-e PRD_FILE=docs/specs.md \
		-e TECH_STACK_FILE=docs/tech_stack.md \
		--output prompts/rules_python.prompt

prompt-llm:
	@echo "Generating llm prompt..."
	pdd --force generate --template generic/generate_prompt \
		-e MODULE=llm \
		-e LANG_OR_FRAMEWORK=python \
		-e ARCHITECTURE_FILE=architecture.json \
		-e PRD_FILE=docs/specs.md \
		-e TECH_STACK_FILE=docs/tech_stack.md \
		--output prompts/llm_python.prompt

prompt-fix:
	@echo "Generating fix prompt..."
	pdd --force generate --template generic/generate_prompt \
		-e MODULE=fix \
		-e LANG_OR_FRAMEWORK=python \
		-e ARCHITECTURE_FILE=architecture.json \
		-e PRD_FILE=docs/specs.md \
		-e TECH_STACK_FILE=docs/tech_stack.md \
		--output prompts/fix_python.prompt

prompt-report:
	@echo "Generating report prompt..."
	pdd --force generate --template generic/generate_prompt \
		-e MODULE=report \
		-e LANG_OR_FRAMEWORK=python \
		-e ARCHITECTURE_FILE=architecture.json \
		-e PRD_FILE=docs/specs.md \
		-e TECH_STACK_FILE=docs/tech_stack.md \
		--output prompts/report_python.prompt

prompt-pipeline:
	@echo "Generating pipeline prompt..."
	pdd --force generate --template generic/generate_prompt \
		-e MODULE=pipeline \
		-e LANG_OR_FRAMEWORK=python \
		-e ARCHITECTURE_FILE=architecture.json \
		-e PRD_FILE=docs/specs.md \
		-e TECH_STACK_FILE=docs/tech_stack.md \
		--output prompts/pipeline_python.prompt

prompt-cli:
	@echo "Generating cli prompt..."
	pdd --force generate --template generic/generate_prompt \
		-e MODULE=cli \
		-e LANG_OR_FRAMEWORK=python \
		-e ARCHITECTURE_FILE=architecture.json \
		-e PRD_FILE=docs/specs.md \
		-e TECH_STACK_FILE=docs/tech_stack.md \
		--output prompts/cli_python.prompt

prompt-backend:
	@echo "Generating backend_api prompt..."
	pdd --force generate --template generic/generate_prompt \
		-e MODULE=backend_api \
		-e LANG_OR_FRAMEWORK=python \
		-e ARCHITECTURE_FILE=architecture.json \
		-e PRD_FILE=docs/specs.md \
		-e TECH_STACK_FILE=docs/tech_stack.md \
		--output prompts/backend_api_python.prompt

prompt-frontend:
	@echo "Generating frontend_streamlit prompt..."
	pdd --force generate --template generic/generate_prompt \
		-e MODULE=frontend_streamlit \
		-e LANG_OR_FRAMEWORK=python \
		-e ARCHITECTURE_FILE=architecture.json \
		-e PRD_FILE=docs/specs.md \
		-e TECH_STACK_FILE=docs/tech_stack.md \
		--output prompts/frontend_streamlit_python.prompt

# Step 5: Run pdd sync on all modules in dependency order
sync-all: sync-foundation sync-core sync-interfaces
	@echo "✓ All modules synchronized"

# Foundation modules (no dependencies)
sync-foundation:
	@echo "Syncing foundation modules..."
	pdd sync models
	pdd sync helpers
	@echo "✓ Foundation modules complete"

# Core modules (depend on foundation)
sync-core:
	@echo "Syncing core modules..."
	pdd sync rules
	pdd sync llm
	pdd sync fix
	pdd sync report
	pdd sync pipeline
	@echo "✓ Core modules complete"

# Interface modules (depend on core)
sync-interfaces:
	@echo "Syncing interface modules..."
	pdd sync cli
	pdd sync backend_api
	pdd sync frontend_streamlit
	@echo "✓ Interface modules complete"

# Run all tests
test:
	@echo "Running all tests..."
	pytest tests/
	@echo "✓ Tests complete"

# Clean generated files (keeps prompts and architecture)
clean:
	@echo "Cleaning generated files..."
	rm -rf src/utils/*.py src/cli/*.py src/backend/*.py src/frontend/*.py
	rm -rf tests/test_*.py
	rm -rf examples/*_example.py
	rm -rf __pycache__ .pytest_cache
	@echo "✓ Cleaned (prompts and architecture preserved)"

