# ==========================================
# Vibe Coding 开发环境快捷管理
# ==========================================

.PHONY: up down restart build shell ssh-init check clean logs zed

# 默认变量
CONTAINER_NAME=vibe-coding-env
# 从 .env 获取配置，若无则使用默认值
SSH_KEY_NAME ?= $(shell grep SSH_KEY_NAME .env | cut -d '=' -f2 || echo id_ed25519)
SSH_PORT ?= $(shell grep SSH_PORT .env | cut -d '=' -f2 || echo 2222)

# --- 核心命令 ---

# 启动环境
up:
	@echo "🚀 正在启动 Vibe 环境..."
	docker compose up -d
	@echo "✅ 环境已就绪。"

# 停止环境
down:
	@echo "🛑 正在停止环境..."
	docker compose down

# 重启环境
restart: down up

# 重新构建镜像 (当修改了 Dockerfile 或想升级工具时使用)
build:
	@echo "🛠️ 正在重新构建镜像..."
	docker compose build --no-cache
	docker compose down
	docker compose up -d

# --- 连接与交互 ---

# 直接通过 Docker 进入交互式 Shell
shell:
	docker exec -it $(CONTAINER_NAME) zsh

# 增强版：自动识别 ED25519 或 RSA 并注入
ssh-init:
	@echo "🔑 正在同步 SSH 公钥 ($(SSH_KEY_NAME)) 到容器..."
	@if [ -f ~/.ssh/$(SSH_KEY_NAME).pub ]; then \
		cat ~/.ssh/$(SSH_KEY_NAME).pub | docker exec -i vibe-coding-env sh -c "mkdir -p /root/.ssh && cat >> /root/.ssh/authorized_keys && chmod 600 /root/.ssh/authorized_keys"; \
		echo "✅ 公钥注入完成。"; \
	else \
		echo "❌ 错误: 未在宿主机 ~/.ssh/ 找到 $(SSH_KEY_NAME).pub"; \
	fi


# 使用 Zed 命令行工具直接打开远程项目
zed:
	@echo "🎨 正在唤起 Zed 远程开发..."
	zed ssh://root@localhost:$(SSH_PORT)/workspace

# --- 维护与自检 ---

# 查看运行日志
logs:
	docker compose logs -f

# 环境健康检查：验证 Rust, Bun, AI 工具是否正常
check:
	@echo "🔍 执行工具自检..."
	@docker exec -it $(CONTAINER_NAME) rustc --version || echo "❌ Rust 未就绪"
	@docker exec -it $(CONTAINER_NAME) go version || echo "❌ Go 未就绪"
	@docker exec -it $(CONTAINER_NAME) bun --version || echo "❌ Bun 未就绪"
	@docker exec -it $(CONTAINER_NAME) opencode version || echo "❌ OpenCode 未就绪"
	@docker exec -it $(CONTAINER_NAME) omp --version || echo "❌ Oh My Pi 未就绪"
	@echo "✨ 自检完成！"

add-key:
	@$(eval KEY_PATH := $(if $(PUB),$(PUB),$(SSH_PUB_KEY_PATH)))
	@echo "🔑 正在从 $(KEY_PATH) 添加公钥..."
	@if [ -f $(KEY_PATH) ]; then \
		cat $(KEY_PATH) | docker exec -i $(CONTAINER_NAME) sh -c "mkdir -p /root/.ssh && cat >> /root/.ssh/authorized_keys && chmod 600 /root/.ssh/authorized_keys"; \
		echo "✅ 公钥已追加。"; \
	else \
		echo "❌ 错误: 找不到文件 $(KEY_PATH)"; \
	fi

add-key-str:
	@if [ -z "$(STR)" ]; then \
		echo "❌ 错误: 请提供公钥字符串。"; \
		echo "用法: make add-key-str STR='您的公钥内容'"; \
	else \
		echo "$(STR)" | docker exec -i vibe-coding-env sh -c "mkdir -p /root/.ssh && cat >> /root/.ssh/authorized_keys && chmod 600 /root/.ssh/authorized_keys"; \
		echo "✅ 公钥字符串已成功追加到容器。"; \
	fi

# 彻底清理 (删除镜像、容器以及所有持久化缓存卷)
# 警告：这将导致重新下载所有 Rust/Bun 依赖和 Zed Server
clean:
	@echo "⚠️ 正在执行深度清理..."
	docker compose down -v
	@echo "✨ 清理完毕，环境已重置。"

# --- 帮助系统 ---
help:
	@echo "🚀 Vibe Coding 环境命令行助手"
	@echo ""
	@echo "📋 容器生命周期管理:"
	@echo "  make up          - 启动环境 (并自动通过 /tmp 注入 .env 中的主密钥)"
	@echo "  make down        - 停止并移除容器"
	@echo "  make restart     - 重启容器"
	@echo "  make build       - 强制重新构建镜像 (不使用缓存)"
	@echo "  make clean       - 彻底清理 (删除镜像、容器及所有持久化缓存卷)"
	@echo ""
	@echo "🔑 SSH 密钥管理:"
	@echo "  make ssh-init    - [初始化] 同步宿主机默认公钥到容器"
	@echo "  make add-key     - [文件导入] 从指定文件添加公钥"
	@echo "                     用法: make add-key PUB=~/.ssh/other_key.pub"
	@echo "  make add-key-str - [字符串导入] 直接通过粘贴字符串添加公钥"
	@echo "                     用法: make add-key-str STR='ssh-ed25519 AAA...'"
	@echo ""
	@echo "💻 开发与调试:"
	@echo "  make zed         - 通过 Zed 编辑器打开远程项目"
	@echo "  make shell       - 进入容器内的 ZSH 终端"
	@echo "  make check       - 检查 Rust, Bun, AI 工具链版本状态"
	@echo "  make logs        - 查看容器实时运行日志"
	@echo ""
