# 变量定义
APP_NAME = cangjie1.0.1-hello-world
CANGJIE_VERSION = 1.0.1
MAIN_MODULE = HelloWorld
BUILD_DIR = target
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

# 仓颉编译器设置
CANGJIE = cjc
CJPM = cjpm

# 默认目标
.PHONY: all
all: install

# 安装命令
.PHONY: install
install:
	@echo "检查仓颉版本..."
	@$(CANGJIE) -v
	@echo "检查项目是否已编译..."
	@if [ ! -d "$(BUILD_DIR)" ]; then \
		echo "正在编译仓颉源代码..."; \
		$(CJPM) build; \
		echo "✅ 仓颉源代码编译完成"; \
	else \
		echo "✅ 仓颉源代码已编译"; \
	fi
	@echo "✅ 安装完成！仓颉项目已准备就绪"

# 运行命令（后台运行HTTP服务器）
.PHONY: run
run: install
	@echo "正在启动仓颉 HTTP 服务器..."
	@mkdir -p $(dir $(LOG_FILE))
	@if [ -f "$(PID_FILE)" ]; then \
		echo "服务器已在运行中，PID: $$(cat $(PID_FILE))"; \
		exit 1; \
	fi
	@echo "启动服务器在端口 $(APP_PORT)..."
	@APP_PORT_1=$(APP_PORT) nohup $(CJPM) run > $(LOG_FILE) 2>&1 & echo $$! > $(PID_FILE)
	@echo "✅ 仓颉 HTTP 服务器已启动，PID: $$(cat $(PID_FILE))"
	@echo "服务器运行在: http://localhost:$(APP_PORT)/"
	@echo "查看日志: tail -f $(LOG_FILE)"
	@echo "注意: PID 文件记录的是 cjpm 进程，实际服务可能运行在子进程中"

# 停止命令
.PHONY: stop
stop:
	@echo "正在查找并杀死所有相关的仓颉进程..."
	@if [ -f "$(PID_FILE)" ]; then \
		MAIN_PID=$$(cat $(PID_FILE)); \
		echo "主进程PID: $$MAIN_PID"; \
		kill -9 $$MAIN_PID 2>/dev/null || true; \
		sleep 1; \
	fi
	@PIDS=$$(ps aux | grep -E "cjpm|cangjie|helloworld" | grep -v grep | awk '{print $$2}'); \
	if [ -n "$$PIDS" ]; then \
		echo "找到相关进程: $$PIDS"; \
		for PID in $$PIDS; do \
			echo "正在杀死进程 $$PID..."; \
			kill -9 $$PID 2>/dev/null || true; \
		done; \
		sleep 1; \
		echo "✅ 所有相关仓颉进程已被强制停止"; \
	else \
		echo "未找到相关的仓颉进程"; \
	fi
	@rm -f $(PID_FILE)
	@echo "✅ 停止操作完成"
