#!/usr/bin/env bash
# ------------------------------------------------------------------------------
# H5-in-App-Integration SDK · iOS (Objective-C) 单元测试入口
#
# 用法：
#   bash scripts/test-ios-objectivec.sh                  # 运行全部单元测试
#   bash scripts/test-ios-objectivec.sh --help           # 查看本帮助
#
# 测试框架：XCTest
# 测试目录：ios-objective-c/TencentQianWebViewTests/
# Test Target：TencentQianWebViewTests（关联 TencentQianWebView scheme）
#
# 设计要点：
# - 使用 XcodeGen 生成 .xcodeproj（首次需要 brew install xcodegen）
# - 测试通过 xcodebuild test 执行，使用 iOS Simulator
# - 不需要真机签名（CODE_SIGNING_ALLOWED=NO）
# - 可通过 IOS_TEST_DESTINATION 环境变量指定模拟器
# ------------------------------------------------------------------------------
set -euo pipefail

# ---- 路径与常量 --------------------------------------------------------------
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
REPO_ROOT="$(cd "${SCRIPT_DIR}/.." && pwd)"
IOS_DIR="${REPO_ROOT}/ios-objective-c"

# 默认 Simulator 目标（机型默认 iPhone 15，与 Xcode 15.x 自带 SDK 对齐；可通过 IOS_TEST_DESTINATION 覆盖）
DESTINATION="${IOS_TEST_DESTINATION:-platform=iOS Simulator,name=iPhone 15,OS=latest}"
SCHEME="TencentQianWebView"

# ---- 提前处理 --help ---------------------------------------------------------
case "${1:-}" in
  -h|--help)
    sed -n '2,18p' "${BASH_SOURCE[0]}"
    exit 0
    ;;
esac

# ---- 工具链就绪检查 ----------------------------------------------------------
if ! command -v xcodebuild >/dev/null 2>&1; then
  echo "❌ 找不到 xcodebuild。请安装 Xcode Command Line Tools。" >&2
  exit 1
fi

if ! command -v xcodegen >/dev/null 2>&1; then
  echo "❌ 找不到 xcodegen。请执行：brew install xcodegen" >&2
  exit 1
fi

# ---- 生成 Xcode 项目 --------------------------------------------------------
echo "ℹ️  iOS-OC 项目目录：${IOS_DIR}"
echo "ℹ️  Scheme：${SCHEME}"
echo "ℹ️  Destination：${DESTINATION}"
echo ""

# 工程文件格式由 project.yml 中 options.projectFormat 控制（XcodeGen 2.45+ 官方选项），
# 这里要求 xcodegen 至少 2.45.0，避免老版本忽略该字段。
XCODEGEN_MIN_REQUIRED="2.45.0"
XCODEGEN_VER="$(xcodegen --version 2>/dev/null | awk '{print $NF}')"
if [[ -z "${XCODEGEN_VER}" ]]; then
  echo "❌ 无法获取 xcodegen 版本，请确认安装：brew install xcodegen" >&2
  exit 1
fi
ver_lt() { [[ "$(printf '%s\n%s\n' "$1" "$2" | sort -V | head -1)" == "$1" && "$1" != "$2" ]]; }
if ver_lt "${XCODEGEN_VER}" "${XCODEGEN_MIN_REQUIRED}"; then
  echo "❌ xcodegen ${XCODEGEN_VER} 过旧，本工程要求 ≥ ${XCODEGEN_MIN_REQUIRED}（projectFormat 选项）。请：brew upgrade xcodegen" >&2
  exit 1
fi

echo "▶ 生成 Xcode 项目（xcodegen ${XCODEGEN_VER}）..."
pushd "${IOS_DIR}" >/dev/null
xcodegen generate --quiet 2>/dev/null || xcodegen generate
popd >/dev/null

# ---- 执行单元测试 ------------------------------------------------------------
echo ""
echo "▶ 运行单元测试 ..."
xcodebuild test \
  -project "${IOS_DIR}/Demo.xcodeproj" \
  -scheme "${SCHEME}" \
  -destination "${DESTINATION}" \
  CODE_SIGNING_ALLOWED=NO \
  -quiet 2>&1 | tail -20

# 检查 xcodebuild 退出码
RESULT=${PIPESTATUS[0]}
echo ""
if [[ ${RESULT} -eq 0 ]]; then
  echo "✅ iOS-OC 单元测试全部通过！"
else
  echo "❌ iOS-OC 单元测试失败（exit code: ${RESULT}）"
  exit ${RESULT}
fi
