#!/bin/bash
# gen-sprite.sh — AI 生图资源管线一键脚本
# 用法: bash scripts/gen-sprite.sh <entity> [--name output_name]
#
# 示例:
#   bash scripts/gen-sprite.sh car
#   bash scripts/gen-sprite.sh "red race car" --name racing_car

set -e

ENTITY="${1:-car}"
OUTPUT_NAME=""
MODEL="google/gemini-3.1-flash-image-preview"
ASSETS_DIR="assets/images"

# 解析参数
shift 2>/dev/null || true
while [[ $# -gt 0 ]]; do
  case $1 in
    --name) OUTPUT_NAME="$2"; shift 2 ;;
    --model) MODEL="$2"; shift 2 ;;
    *) shift ;;
  esac
done

# 如果没有指定输出名，从 entity 提取（取第一个单词，小写）
if [ -z "$OUTPUT_NAME" ]; then
  OUTPUT_NAME=$(echo "$ENTITY" | awk '{print $1}' | tr '[:upper:]' '[:lower:]')
fi

PROMPT="top-down bird's eye view of a cute cartoon ${ENTITY}, facing upward, simple flat design, bright vivid colors, game asset, white background, centered on canvas, no shadow, 256x256 icon style"

echo "🎨 Generating: ${ENTITY}"
echo "📦 Model: ${MODEL}"
echo "📂 Output: ${ASSETS_DIR}/${OUTPUT_NAME}.webp"
echo ""

# 确保目录存在
mkdir -p "${ASSETS_DIR}"

RAW_FILE="${ASSETS_DIR}/${OUTPUT_NAME}_raw.jpg"
NOBG_FILE="${ASSETS_DIR}/${OUTPUT_NAME}_nobg.png"
TRIM_FILE="${ASSETS_DIR}/${OUTPUT_NAME}_trimmed.png"
FINAL_FILE="${ASSETS_DIR}/${OUTPUT_NAME}.webp"

# Step 1: 生成
echo "⏳ Generating image..."
playcraft tools generate-image \
  --prompt "${PROMPT}" \
  --aspect-ratio 1:1 \
  --image-model "${MODEL}" \
  --output "${RAW_FILE}" 2>&1 | tail -1

# 处理 playcraft 可能将输出改为 .jpg
if [ ! -f "${RAW_FILE}" ]; then
  # playcraft 可能输出了不同扩展名
  POSSIBLE_JPG="${RAW_FILE%.png}.jpg"
  if [ -f "${POSSIBLE_JPG}" ]; then
    RAW_FILE="${POSSIBLE_JPG}"
  fi
fi

echo "✅ Generated raw image"

# Step 2: 去背景
echo "🔲 Removing background..."
playcraft image remove-background \
  --input "${RAW_FILE}" \
  --output "${NOBG_FILE}" 2>&1 | tail -1

# Step 3: 裁切
echo "✂️  Trimming..."
playcraft image trim \
  --input "${NOBG_FILE}" \
  --output "${TRIM_FILE}" 2>&1 | tail -1

# Step 4: 转 webp
echo "🔄 Converting to webp..."
playcraft image convert \
  --input "${TRIM_FILE}" \
  --output "${FINAL_FILE}" \
  --quality 90 2>&1 | tail -1

# Step 5: 清理
echo "🧹 Cleaning up..."
rm -f "${RAW_FILE}" "${NOBG_FILE}" "${TRIM_FILE}"

# 获取文件大小
FILE_SIZE=$(du -h "${FINAL_FILE}" | awk '{print $1}')

echo ""
echo "✅ Done: ${FINAL_FILE} (${FILE_SIZE})"
echo ""
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
echo "Integration code:"
echo ""
echo "  // Add to Preloader.ts imports:"
echo "  import ${OUTPUT_NAME}Image from \"assets/images/${OUTPUT_NAME}.webp\";"
echo ""
echo "  // Add to preload():"
echo "  this.load.image(\"${OUTPUT_NAME}\", ${OUTPUT_NAME}Image);"
echo ""
echo "  // Use in scene:"
echo "  const sprite = scene.add.image(x, y, \"${OUTPUT_NAME}\");"
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
