#!/bin/bash

# Интерактивный скрипт для автоматизации релиза
# Использование: ./scripts/release-interactive.sh [version]
# Если версия не указана, скрипт запросит её интерактивно

set -e  # Остановить выполнение при ошибке

# Функция для получения версии интерактивно
get_version_interactive() {
    echo "🚀 Создание нового релиза"
    echo ""
    
    # Показываем текущую версию
    CURRENT_VERSION=$(grep 'const version = "' main.go | sed 's/const version = "\([^"]*\)"/\1/')
    echo "📋 Текущая версия: $CURRENT_VERSION"
    echo ""
    
    # Запрашиваем новую версию
    read -p "Введите новую версию (формат X.Y.Z): " VERSION
    
    # Проверяем, что версия не пустая
    if [ -z "$VERSION" ]; then
        echo "❌ Версия не может быть пустой"
        exit 1
    fi
    
    # Проверяем формат версии
    if [[ ! $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
        echo "❌ Неверный формат версии. Используйте формат X.Y.Z (например, 1.0.25)"
        exit 1
    fi
    
    # Подтверждение
    echo ""
    echo "📝 Подтверждение:"
    echo "   Текущая версия: $CURRENT_VERSION"
    echo "   Новая версия: $VERSION"
    echo ""
    read -p "Продолжить? (y/N): " CONFIRM
    
    if [[ ! $CONFIRM =~ ^[Yy]$ ]]; then
        echo "❌ Релиз отменен"
        exit 0
    fi
}

# Проверяем, передана ли версия как аргумент
if [ $# -eq 0 ]; then
    # Версия не указана, запрашиваем интерактивно
    get_version_interactive
else
    # Версия указана как аргумент
    VERSION=$1
    
    # Проверка формата версии
    if [[ ! $VERSION =~ ^[0-9]+\.[0-9]+\.[0-9]+$ ]]; then
        echo "Ошибка: Неверный формат версии. Используйте формат X.Y.Z (например, 1.0.25)"
        exit 1
    fi
fi

echo "🚀 Начинаем релиз версии v$VERSION..."

# Проверяем, что мы в git репозитории
if ! git rev-parse --git-dir > /dev/null 2>&1; then
    echo "Ошибка: Не найден git репозиторий"
    exit 1
fi

# Проверяем, что нет незакоммиченных изменений
# if ! git diff-index --quiet HEAD --; then
#     echo "Ошибка: Есть незакоммиченные изменения. Сначала закоммитьте их."
#     exit 1
# fi

# Обновляем версию в main.go
echo "📝 Обновляем версию в main.go..."
if [[ "$OSTYPE" == "darwin"* ]]; then
    # macOS
    sed -i '' "s/const version = \"[^\"]*\"/const version = \"$VERSION\"/" main.go
else
    # Linux
    sed -i "s/const version = \"[^\"]*\"/const version = \"$VERSION\"/" main.go
fi

# Проверяем, что изменение применилось
if ! grep -q "const version = \"$VERSION\"" main.go; then
    echo "Ошибка: Не удалось обновить версию в main.go"
    exit 1
fi

echo "✅ Версия обновлена в main.go"

# Выполняем git команды
echo "📦 Добавляем изменения в git..."
git add .

echo "💾 Создаем коммит..."
git commit -m "Release v$VERSION"

echo "🏷️  Создаем тег..."
git tag -a "v$VERSION" -m "Release v$VERSION"

echo "🚀 Отправляем изменения и теги..."
git push
git push --tags

echo "🎉 Релиз v$VERSION успешно завершен!"
echo "📋 Выполненные действия:"
echo "   - Обновлена версия в main.go"
echo "   - Создан коммит с сообщением 'Release v$VERSION'"
echo "   - Создан тег v$VERSION"
echo "   - Изменения отправлены в удаленный репозиторий" 