set dotenv-load := true

default:
    @just --list

dev-back:
    go run ./cmd/cdropd

dev-front:
    cd web && npm run dev

build-back:
    mkdir -p dist
    go build -o dist/cdropd ./cmd/cdropd

build-front:
    cd web && npm run build

build: build-back build-front

test:
    go test ./...

typecheck-front:
    cd web && npm run typecheck

fmt:
    gofmt -w .

vet:
    go vet ./...

# 生成一对 VAPID 密钥（Web Push 用）。输出两行 env，写进部署密钥后固定不变——
# 更换会使所有既有浏览器订阅失效。两者皆设才启用推送。
vapid-keygen:
    go run ./cmd/vapidgen

# ---- desktop client (Wails · macOS 主开发，Windows 在 Parallels 验证) ----

# wails CLI 在 go install 后落在 $(go env GOPATH)/bin/wails，
# 用绝对路径避免依赖 shell PATH 配置。
wails := `go env GOPATH` + "/bin/wails"

# 起 wails dev 热重载，前端走 Vite dev server。
desktop-dev:
    cd desktop && {{wails}} dev

# 构建 macOS universal .app（含 darwin/arm64 + darwin/amd64）。
# 不加 -clean，让 mac/win 产物在 build/bin/ 共存；清理走 desktop-clean。
#
# ⚠️ 先手动构建前端再 `wails build -s`（跳过 wails 自带前端步骤）：wails build 的
# frontend:build 在本仓库结构下不可靠（不实际重建 web/ → 嵌入旧 JS）。显式构建
# web → desktop/frontend/dist，再用 -s 让 go:embed 嵌入这份新 dist。
desktop-build-mac:
    cd web && npm run build -- --outDir ../desktop/frontend/dist --emptyOutDir
    cd desktop && {{wails}} build -s -platform darwin/universal

# 交叉编译 Windows amd64 .exe。macOS 原生即可——Windows 侧无 cgo（darwin 的
# NSStatusBar/NSPasteboard CGO 走 build tag 排除，WebView2 是纯 Go），不需 mingw。
# 与 mac 同：先手动构建前端再 -s（wails 自带 frontend:build 在本仓库不可靠）。
# 产物 build/bin/desktop.exe；真测试经 RDP 到 Windows 机器跑。
desktop-build-win:
    cd web && npm run build -- --outDir ../desktop/frontend/dist --emptyOutDir
    cd desktop && {{wails}} build -s -platform windows/amd64

# 清空 build/bin/ 产物。
desktop-clean:
    rm -rf desktop/build/bin

# 环境自检。
desktop-doctor:
    {{wails}} doctor

# ---- deploy plumbing ----

# 一次性预热：把 Go modules + node_modules 烤进 cdrop-base:latest。
# 仅 go.mod/go.sum 或 web/package*.json 改动时需要重跑。
# 用宿主原生 arch（macOS arm64 → linux/arm64），让 BUILDPLATFORM 跨编译走原生。
docker-base:
    docker buildx build -f docker/Dockerfile.base -t cdrop-base:latest --load .

# 应用镜像：从 cdrop-base 起步只编译源码，最终落 linux/amd64 distroless。
# dev mode 部署时 export VITE_CDROP_DEV_TOKEN=<同后端 token> 把它烤进前端 bundle。
docker-image:
    docker buildx build --platform linux/amd64 \
        --build-arg VITE_CDROP_DEV_TOKEN="${VITE_CDROP_DEV_TOKEN:-}" \
        --build-arg VITE_CDROP_STUN_URLS="${VITE_CDROP_STUN_URLS:-}" \
        -f docker/Dockerfile -t cdrop:latest --load .
