#!/bin/bash

# ================================================
# HarmonyOS 项目编译脚本
# ================================================

# 设置颜色输出
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color

echo -e "${GREEN}================================${NC}"
echo -e "${GREEN}  HarmonyOS 项目编译脚本${NC}"
echo -e "${GREEN}================================${NC}"
echo ""

# 1. 检查 Node.js
echo -e "${YELLOW}[1/6] 检查 Node.js...${NC}"
if ! command -v node &> /dev/null; then
    echo -e "${RED}❌ 未找到 Node.js，请先安装 Node.js${NC}"
    exit 1
fi
NODE_VERSION=$(node --version)
echo -e "${GREEN}✅ Node.js 版本: $NODE_VERSION${NC}"
echo ""

# 2. 检查 DevEco Studio
echo -e "${YELLOW}[2/6] 检查 DevEco Studio...${NC}"
DEVECO_APP="/Applications/DevEco-Studio.app"
if [ ! -d "$DEVECO_APP" ]; then
    echo -e "${RED}❌ 未找到 DevEco Studio，请先安装${NC}"
    exit 1
fi
echo -e "${GREEN}✅ DevEco Studio 已安装${NC}"
echo ""

# 3. 设置环境变量
echo -e "${YELLOW}[3/6] 设置环境变量...${NC}"

# Node 和 hvigorw 路径
NODE_BIN="$DEVECO_APP/Contents/tools/node/bin/node"
HVIGORW_JS="$DEVECO_APP/Contents/tools/hvigor/bin/hvigorw.js"

# SDK 路径（正确的路径）
export DEVECO_SDK_HOME="$DEVECO_APP/Contents/sdk"
export HOS_SDK_HOME="$DEVECO_APP/Contents/sdk"
export OHOS_SDK_HOME="$DEVECO_APP/Contents/sdk"

if [ ! -d "$DEVECO_SDK_HOME" ]; then
    echo -e "${RED}❌ 未找到 SDK: $DEVECO_SDK_HOME${NC}"
    echo -e "${YELLOW}提示：在 DevEco Studio 中打开项目，SDK 会自动下载${NC}"
    exit 1
fi
echo -e "${GREEN}✅ SDK 路径: $DEVECO_SDK_HOME${NC}"
echo ""

# 4. 清理之前的构建
echo -e "${YELLOW}[4/6] 清理之前的构建...${NC}"
if [ -d "build" ]; then
    rm -rf build
    echo -e "${GREEN}✅ 已清理 build 目录${NC}"
fi
echo ""

# 5. 停止之前的 daemon
echo -e "${YELLOW}[5/6] 停止之前的 hvigor daemon...${NC}"
"$NODE_BIN" "$HVIGORW_JS" --stop-daemon 2>/dev/null || true
echo ""

# 6. 开始编译
echo -e "${YELLOW}[6/6] 开始编译项目...${NC}"
echo -e "${YELLOW}命令: node hvigorw.js --mode module -p module=entry@default -p product=default -p requiredDeviceType=tablet assembleHap --analyze=normal --parallel --incremental --daemon${NC}"
echo ""

"$NODE_BIN" "$HVIGORW_JS" \
  --mode module \
  -p module=entry@default \
  -p product=default \
  -p requiredDeviceType=tablet \
  assembleHap \
  --analyze=normal \
  --parallel \
  --incremental \
  --daemon

EXIT_CODE=$?

echo ""
if [ $EXIT_CODE -eq 0 ]; then
    echo -e "${GREEN}================================${NC}"
    echo -e "${GREEN}  ✅ 编译成功！${NC}"
    echo -e "${GREEN}================================${NC}"
    echo ""
    echo -e "${GREEN}输出文件位置：${NC}"
    find entry/build -name "*.hap" -type f 2>/dev/null | while read file; do
        size=$(du -h "$file" 2>/dev/null | cut -f1)
        echo -e "${GREEN}  📦 $file ($size)${NC}"
    done
else
    echo -e "${RED}================================${NC}"
    echo -e "${RED}  ❌ 编译失败！${NC}"
    echo -e "${RED}================================${NC}"
    echo ""
    echo -e "${YELLOW}故障排查建议：${NC}"
    echo -e "1. 在 DevEco Studio 中打开项目"
    echo -e "2. 等待 SDK 自动下载完成"
    echo -e "3. 在 DevEco Studio 中点击 Build > Build Hap(s)"
    echo -e "4. 确认可以在 IDE 中编译成功后，再使用脚本编译"
fi

exit $EXIT_CODE

