#!/bin/bash
# ============================================================
# Cyrene 项目迁移打包脚本
# 用途: 在 Linux 环境下生成干净的源代码压缩包，
#       用于迁移到 Windows 平台。
# 用法: bash scripts/migrate.sh [输出目录]
# ============================================================

set -euo pipefail

# 输出目录，默认为 /tmp
OUTPUT_DIR="${1:-/tmp}"
TIMESTAMP=$(date +%Y%m%d_%H%M%S)
ARCHIVE_NAME="cyrene-source-${TIMESTAMP}.tar.gz"
PROJECT_ROOT="$(cd "$(dirname "$0")/.." && pwd)"

echo "=== Cyrene 源码打包 ==="
echo "项目根目录: ${PROJECT_ROOT}"
echo "输出文件:   ${OUTPUT_DIR}/${ARCHIVE_NAME}"
echo ""

# 确保输出目录存在
mkdir -p "${OUTPUT_DIR}"

cd "${PROJECT_ROOT}"

echo "正在打包..."

# 打包源码，排除二进制和编译产物
# --exclude 规则说明:
#   *.exe                     - Windows 可执行文件（旧的编译产物）
#   backend/*/main            - Go 编译生成的 Linux 二进制
#   backend/*/cmd/* (非.go)   - 各服务的编译产物
#   node_modules              - Node.js 依赖
#   dist                      - 前端构建产物
#   .env                      - 敏感配置文件
#   *.log / logs/             - 日志文件
#   tmp/                      - 临时文件
#   .git/objects/refs/logs    - Git 内部数据（保留 HEAD 和 config）
#   package-lock.json         - 锁文件（跨平台重新生成）
#
tar -czf "${OUTPUT_DIR}/${ARCHIVE_NAME}" \
    --exclude='*.exe' \
    --exclude='main' \
    --exclude='backend/ai-core/main' \
    --exclude='backend/ai-core/cmd/ai-core' \
    --exclude='backend/gateway/main' \
    --exclude='backend/gateway/cmd/main' \
    --exclude='backend/memory-service/main' \
    --exclude='backend/memory-service/cmd/memory-service' \
    --exclude='backend/tool-engine/cmd/tool-engine' \
    --exclude='backend/iot-debug-service/cmd/iot-debug-service' \
    --exclude='backend/voice-service/cmd/voice-service' \
    --exclude='node_modules' \
    --exclude='frontend/web/node_modules' \
    --exclude='frontend/web/dist' \
    --exclude='frontend/node_modules' \
    --exclude='ethend/node_modules' \
    --exclude='frontend/packages/*/node_modules' \
    --exclude='.env' \
    --exclude='backend/.env' \
    --exclude='*.log' \
    --exclude='logs/' \
    --exclude='debug/logs/' \
    --exclude='debug/logs/chromium/' \
    --exclude='tmp/' \
    --exclude='.git/objects' \
    --exclude='.git/refs' \
    --exclude='.git/logs' \
    --exclude='package-lock.json' \
    --exclude='frontend/web/package-lock.json' \
    --exclude='frontend/package-lock.json' \
    --exclude='frontend/packages/*/package-lock.json' \
    .

echo ""
echo "✅ 打包完成!"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "文件: ${OUTPUT_DIR}/${ARCHIVE_NAME}"
echo "大小: $(du -h "${OUTPUT_DIR}/${ARCHIVE_NAME}" | cut -f1)"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo ""
echo "=== 迁移到 Windows 的步骤 ==="
echo "1. 将 ${ARCHIVE_NAME} 传输到 Windows 机器（U盘 / 网络共享 / scp）"
echo "2. 在 Windows 上解压: tar -xzf ${ARCHIVE_NAME}"
echo "3. 阅读 Migration.md 了解完整迁移流程"
echo "4. 复制 .env.example 为 .env 并填入实际配置"
echo "5. 编译并启动服务（参考 Migration.md 第 6 章）"
echo ""
echo "提示: 压缩包中已包含文档 docs/ 和 Migration.md，解压后即可查看。"
