# TsDB2 Makefile
# 时序数据库构建、测试与开发工具

.PHONY: all build test clean run help \
        test-full test-commit test-dirty test-integrity test-mem \
        demo-analyzer fmt lint deps tree

# =============================================================================
# 默认目标
# =============================================================================
all: build

# =============================================================================
# 构建
# =============================================================================
build:
	@echo "=== 构建 TsDB2 ==="
	go build ./...
	@echo "✅ 构建完成"

# =============================================================================
# 测试
# =============================================================================

# 运行所有核心测试
test: test-full test-commit test-dirty test-integrity test-mem

# 完整功能测试 (28 项测试)
test-full:
	@echo ""
	@echo "=========================================="
	@echo "  完整功能测试 (28 项)"
	@echo "=========================================="
	cd demo/full_test && go run main.go

# 自动提交机制测试 (5 场景)
test-commit:
	@echo ""
	@echo "=========================================="
	@echo "  自动提交机制测试 (5 场景)"
	@echo "=========================================="
	cd demo/no_commit_test && go run main.go

# 脏页阈值性能测试
test-dirty:
	@echo ""
	@echo "=========================================="
	@echo "  脏页阈值性能对比测试"
	@echo "=========================================="
	cd demo/dirty_threshold_test && go run main.go

# 数据完整性测试
test-integrity:
	@echo ""
	@echo "=========================================="
	@echo "  数据完整性测试"
	@echo "=========================================="
	cd demo/integrity_test && go run main.go

# 内存使用测试
test-mem:
	@echo ""
	@echo "=========================================="
	@echo "  内存使用测试"
	@echo "=========================================="
	cd demo/mem_test && go run main.go

# =============================================================================
# Demo 程序
# =============================================================================

# 运行 Analyzer (数据库可视化工具)
demo-analyzer:
	@echo "=== 启动 TsDB2 Analyzer ==="
	cd analyzer && go run main.go

# =============================================================================
# 开发工具
# =============================================================================

# 运行主程序
run:
	@echo "=== 运行主程序 ==="
	go run main.go

# 代码格式化
fmt:
	@echo "=== 格式化代码 ==="
	go fmt ./...
	@echo "✅ 格式化完成"

# 代码静态检查
lint:
	@echo "=== 代码静态检查 ==="
	go vet ./...
	@echo "✅ 检查完成"

# 依赖管理
deps:
	@echo "=== 整理依赖 ==="
	go mod tidy
	@echo "=== 验证依赖 ==="
	go mod verify
	@echo "✅ 依赖检查完成"

# 显示项目结构
tree:
	@echo "=== TsDB2 项目结构 ==="
	@echo ""
	@echo "TsDB2/"
	@echo "├── DB/              # 数据库核心层"
	@echo "│   ├── core/        # 底层引擎 (页式存储、B+树、WAL)"
	@echo "│   ├── db.go        # DB 层封装"
	@echo "│   ├── table.go     # 泛型表操作"
	@echo "│   ├── query.go     # 查询构建器"
	@echo "│   └── model.go     # 模型解析"
	@echo "├── analyzer/        # 数据库可视化工具"
	@echo "├── demo/            # 测试程序"
	@echo "│   ├── full_test/       # 完整功能测试"
	@echo "│   ├── no_commit_test/  # 自动提交测试"
	@echo "│   ├── dirty_threshold_test/ # 脏页阈值测试"
	@echo "│   ├── integrity_test/    # 数据完整性测试"
	@echo "│   └── mem_test/          # 内存使用测试"
	@echo "├── docs/            # 文档"
	@echo "└── Makefile         # 构建脚本"
	@echo ""

# 清理临时文件
clean:
	@echo "=== 清理临时文件 ==="
	@rm -f demo/*/*.db
	@rm -f *.db
	@rm -f demo/*/*.exe
	@echo "✅ 清理完成"

# =============================================================================
# 帮助信息
# =============================================================================
help:
	@echo "╔═══════════════════════════════════════════════════════════╗"
	@echo "║           TsDB2 Makefile 使用说明                       ║"
	@echo "╚═══════════════════════════════════════════════════════════╝"
	@echo ""
	@echo "📦 构建与运行"
	@echo "  make build       - 构建整个项目"
	@echo "  make run         - 运行主程序"
	@echo "  make clean       - 清理临时文件 (.db, .exe)"
	@echo ""
	@echo "🧪 核心测试"
	@echo "  make test        - 运行所有核心测试 (推荐)"
	@echo "  make test-full   - 完整功能测试 (28 项)"
	@echo "  make test-commit - 自动提交机制测试 (5 场景)"
	@echo "  make test-dirty  - 脏页阈值性能对比测试"
	@echo "  make test-integrity - 数据完整性测试"
	@echo "  make test-mem    - 内存使用测试"
	@echo ""
	@echo "🎨 Demo 程序"
	@echo "  make demo-analyzer - 启动数据库可视化工具"
	@echo ""
	@echo "🛠️  开发工具"
	@echo "  make fmt         - 格式化代码"
	@echo "  make lint        - 代码静态检查 (go vet)"
	@echo "  make deps        - 依赖管理 (tidy + verify)"
	@echo "  make tree        - 显示项目结构"
	@echo ""
	@echo "📖 快速开始"
	@echo "  make build && make test    # 构建并运行所有测试"
	@echo "  make demo-analyzer         # 启动可视化工具"
	@echo ""
	@echo "💡 提示"
	@echo "  - 首次使用建议运行: make test"
	@echo "  - 查看 Analyzer: make demo-analyzer"
	@echo "  - 提交前检查: make fmt && make lint"
	@echo ""
