#!/bin/bash

# Jackery HACS 发布准备脚本
# 此脚本帮助你准备发布到 HACS 并支持自动创建 GitHub Release

set -e

# 配置路径
COMPONENT_PATH="custom_components/jackery"
MANIFEST_FILE="$COMPONENT_PATH/manifest.json"

echo "🚀 准备发布 Jackery 到 HACS"
echo ""

# 检查是否在正确的目录
if [ ! -f "hacs.json" ]; then
    echo "❌ 错误：未找到 hacs.json 文件"
    echo "请确保在项目根目录运行此脚本"
    exit 1
fi

# 检查 manifest 文件是否存在
if [ ! -f "$MANIFEST_FILE" ]; then
     echo "❌ 错误：未找到 $MANIFEST_FILE"
     echo "请确认文件路径是否正确"
     exit 1
fi

# 检查是否有未提交的更改
if ! git diff-index --quiet HEAD --; then
    echo "⚠️  检测到未提交的更改"
    echo ""
    git status --short
    echo ""
    read -p "是否要提交这些更改？(y/n) " -n 1 -r
    echo
    if [[ $REPLY =~ ^[Yy]$ ]]; then
        read -p "请输入提交信息: " commit_msg
        git add .
        git commit -m "$commit_msg"
        echo "✅ 更改已提交"
    else
        echo "❌ 请先提交或暂存你的更改"
        exit 1
    fi
fi

# 获取当前版本
if [ -f "$MANIFEST_FILE" ]; then
    CURRENT_VERSION=$(python3 -c "import json; print(json.load(open('$MANIFEST_FILE'))['version'])")
else
    echo "❌ 无法读取文件: $MANIFEST_FILE"
    exit 1
fi

echo "📦 当前版本: $CURRENT_VERSION"
echo ""

# 询问新版本
read -p "请输入新版本号 (当前: $CURRENT_VERSION): " NEW_VERSION

if [ -z "$NEW_VERSION" ]; then
    NEW_VERSION=$CURRENT_VERSION
    echo "使用当前版本: $NEW_VERSION"
fi

# 更新 manifest.json 中的版本号
if [ "$NEW_VERSION" != "$CURRENT_VERSION" ]; then
    echo "📝 更新 manifest.json 中的版本号..."
    # 使用正则匹配替换，更稳健
    sed -i.bak "s/\"version\": \".*\"/\"version\": \"$NEW_VERSION\"/" "$MANIFEST_FILE"
    rm "$MANIFEST_FILE.bak"
    
    git add "$MANIFEST_FILE"
    
    # 仅在有变更时提交
    if ! git diff-index --quiet HEAD --; then
        git commit -m "版本更新至 v$NEW_VERSION"
        echo "✅ 版本号已更新"
    else
        echo "⚠️  版本号未发生实际变化或无法提交"
    fi
fi

# 推送到 GitHub
echo ""
echo "📤 推送到 GitHub..."
git push origin main

# 处理 Tag
TAG_NAME="v$NEW_VERSION"

# 检查本地 tag 是否存在
if git rev-parse "$TAG_NAME" >/dev/null 2>&1; then
    echo "⚠️  Tag $TAG_NAME 本地已存在"
    read -p "是否删除旧 Tag 并重新创建? (y/n) " -n 1 -r
    echo
    if [[ $REPLY =~ ^[Yy]$ ]]; then
        git tag -d "$TAG_NAME"
        # 尝试删除远程 tag (如果存在)
        git push origin :refs/tags/"$TAG_NAME" 2>/dev/null || true
        echo "🗑️  旧 Tag 已清除"
    else
        echo "❌ 停止发布：Tag 已存在且未选择覆盖"
        exit 1
    fi
fi

echo ""
echo "🏷️  创建 Git tag: $TAG_NAME"
git tag -a "$TAG_NAME" -m "Release $TAG_NAME"
git push origin "$TAG_NAME"

echo ""
echo "✅ 代码和 Tag 推送完成！"
echo ""

# GitHub Release 自动化
RELEASE_CREATED=false

if command -v gh &> /dev/null; then
    echo "🤖 检测到 GitHub CLI (gh)"
    read -p "是否使用 gh 立即创建 GitHub Release? (y/n) " -n 1 -r
    echo
    if [[ $REPLY =~ ^[Yy]$ ]]; then
        
        RELEASE_TITLE="$TAG_NAME"
        read -p "请输入 Release 标题 (默认: $TAG_NAME): " input_title
        if [ -n "$input_title" ]; then
            RELEASE_TITLE="$input_title"
        fi

        echo "您可以选择 Release Notes 来源:"
        echo "1) 自动生成 (gh --generate-notes)"
        echo "2) 使用简单的 'Release v...'"
        echo "3) 取消自动发布"
        read -p "请选择 (1/2/3, 默认 1): " note_choice
        note_choice=${note_choice:-1}

        case $note_choice in
            1)
                echo "⏳ 正在创建 Release (自动生成日志)..."
                if gh release create "$TAG_NAME" --title "$RELEASE_TITLE" --generate-notes; then
                    RELEASE_CREATED=true
                fi
                ;;
            2)
                echo "⏳ 正在创建 Release..."
                if gh release create "$TAG_NAME" --title "$RELEASE_TITLE" --notes "Release $TAG_NAME"; then
                    RELEASE_CREATED=true
                fi
                ;;
            *)
                echo "已取消 gh 发布。"
                ;;
        esac

        if [ "$RELEASE_CREATED" = true ]; then
             echo "🎉 GitHub Release 创建成功！"
             # 尝试获取 release url
             gh release view "$TAG_NAME" --json url --template '{{.url}}' || echo ""
             echo ""
        fi
    fi
fi

if [ "$RELEASE_CREATED" = false ]; then
    echo "📋 下一步操作 (手动发布):"
    echo "1. 访问 GitHub 创建 Release:"
    echo "   https://github.com/suyulin/jackery/releases/new?tag=$TAG_NAME"
    echo ""
    echo "2. 如果尚未安装，推荐安装 GitHub CLI (gh) 以便下次自动发布。"
fi

echo "✅ 流程结束"