SHELL := /bin/bash
GO    ?= go
PNPM  ?= pnpm
ADDR  ?= :8080

.PHONY: help deps web server dev start build test clean db-reset stop logs

help:
	@echo "ONE · 一个博客"
	@echo ""
	@echo "  make dev     前后端一起起（后端 8080，前端 3000 带热更新）"
	@echo "  make web     只构建前端到 frontend/dist"
	@echo "  make server  只起后端（8080）"
	@echo "  make start   构建前端 + 单端口启动（8080 同时服务前后端）"
	@echo "  make deps    安装前后端依赖"
	@echo "  make test    跑后端测试"
	@echo "  make stop    停掉 make dev 起的两个进程"
	@echo "  make logs    看 dev 进程日志"
	@echo "  make clean   清理构建产物"
	@echo "  make db-reset  删掉本地 SQLite 库（会清空数据）"

deps:
	cd backend && $(GO) mod download
	cd frontend && $(PNPM) install

web:
	cd frontend && $(PNPM) run build

server:
	cd backend && ONE_ADDR=$(ADDR) $(GO) run .

# 一条命令起后端 + 前端（开发用，两个进程）
# 输出写进 .run/*.log，避免后台进程占住终端导致命令不返回
dev:
	@mkdir -p .run
	@(cd backend && { ONE_ADDR=$(ADDR) $(GO) run . > ../.run/server.log 2>&1 & echo $$! > ../.run/server.pid; })
	@(cd frontend && { $(PNPM) run dev > ../.run/web.log 2>&1 & echo $$! > ../.run/web.pid; })
	@echo "后端 http://localhost:8080  （日志 .run/server.log）"
	@echo "前端 http://localhost:3000  （日志 .run/web.log）"
	@echo "停止：make stop   看日志：make logs"

# 生产式单端口：构建前端，由 Go 静态托管
start: web
	cd backend && ONE_ADDR=$(ADDR) $(GO) run .

build: web
	cd backend && $(GO) build -o ../one-server .

test:
	cd backend && $(GO) test ./...

stop:
	@for f in .run/server.pid .run/web.pid; do \
	  if [ -f $$f ]; then pid=$$(cat $$f); \
	    pkill -P $$pid 2>/dev/null; kill $$pid 2>/dev/null; \
	  fi; \
	done
	@rm -f .run/*.pid
	@echo stopped

logs:
	@tail -f .run/server.log .run/web.log

clean:
	rm -rf frontend/dist one-server .run

db-reset:
	rm -f data/one.db data/one.db-wal data/one.db-shm
