# Three.js 项目模板 Makefile
# 用于构建、运行 Three.js 应用

# 变量定义
APP_NAME = threejs-template
NODE_VERSION = 22
APP_PORT = $(or $(APP_PORT_1),8000)
LOG_FILE = $(abspath $(dir $(lastword $(MAKEFILE_LIST))))/.logs/app.log
PID_FILE = $(abspath $(dir $(lastword $(MAKEFILE_LIST))))/.logs/app.pid
RESOURCE_PATH = $(abspath $(dir $(lastword $(MAKEFILE_LIST))))/.resource/resource_dev.json

# Node.js命令
NODE = node
NPM = npm

# 默认目标
.DEFAULT_GOAL := install

# 安装命令
.PHONY: install
install:
	@echo "🎨 初始化 Three.js 应用项目..."
	@echo "检查 Node.js 版本..."
	@$(NODE) --version
	@echo "检查 NPM 版本..."
	@$(NPM) --version
	@echo "安装项目依赖..."
	@if [ -f "package.json" ]; then \
		$(NPM) install; \
		echo "✅ 依赖安装完成"; \
	else \
		echo "❌ package.json 不存在"; \
		exit 1; \
	fi
	@echo "✅ Three.js 应用项目安装完成！"

# 运行命令
.PHONY: run
run: install
	@echo "🎨 启动 Three.js 应用服务器..."
	@mkdir -p $(dir $(LOG_FILE))
	@if [ -f "$(PID_FILE)" ]; then \
		echo "服务器已在运行中，PID: $$(cat $(PID_FILE))"; \
		exit 1; \
	fi
	@echo "构建项目..."
	@$(NPM) run build
	@echo "启动服务器在端口 $(APP_PORT)..."
	@RESOURCE_PATH=$(RESOURCE_PATH) nohup $(NPM) run serve > $(LOG_FILE) 2>&1 & echo $$! > $(PID_FILE)
	@sleep 3
	@echo "✅ Three.js 应用服务器已启动，PID: $$(cat $(PID_FILE))"
	@echo "🎯 应用访问地址: http://localhost:$(APP_PORT)/"
	@echo "📋 查看日志: tail -f $(LOG_FILE)"

# 停止命令
.PHONY: stop
stop:
	@echo "🛑 停止 Three.js 应用服务器..."
	@if [ -f "$(PID_FILE)" ]; then \
		PID=$$(cat $(PID_FILE)); \
		if ps -p $$PID > /dev/null 2>&1; then \
			echo "正在停止进程 $$PID..."; \
			kill -TERM $$PID; \
			sleep 2; \
			if ps -p $$PID > /dev/null 2>&1; then \
				echo "强制停止进程 $$PID..."; \
				kill -9 $$PID; \
			fi; \
			echo "✅ 服务器已停止"; \
		else \
			echo "服务器进程不存在"; \
		fi; \
		rm -f $(PID_FILE); \
	else \
		echo "服务器未运行"; \
	fi

# 清理命令
.PHONY: clean
clean:
	@echo "🧹 清理 Three.js 应用项目文件..."
	@rm -rf node_modules
	@rm -rf .logs
	@rm -rf dist
	@rm -rf build
	@rm -f package-lock.json
	@echo "✅ 清理完成！"

