#!/bin/bash

# Скрипт для обновления и перезапуска приложения через Docker
# Использование: ./deploy.sh

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

echo "🚀 Начинаем обновление..."

echo ""
echo "📥 Шаг 1/5: Обновление кода из Git..."
# Сохраняем локальные изменения в stash (если есть)
if [ -n "$(git status --porcelain)" ]; then
    echo "⚠️  Обнаружены локальные изменения, сохраняем в stash..."
    git stash push -m "Auto-stash before deploy $(date +%Y-%m-%d_%H:%M:%S)" || true
fi
# Получаем последние изменения из репозитория
git fetch origin
# Определяем текущую ветку
BRANCH=$(git rev-parse --abbrev-ref HEAD)
# Принудительно обновляем до состояния репозитория
git reset --hard origin/$BRANCH
if [ $? -eq 0 ]; then
    echo "✅ Код обновлен из Git (ветка: $BRANCH)"
else
    echo "❌ Ошибка при обновлении кода из Git"
    exit 1
fi

echo ""
echo "🛑 Шаг 2/5: Остановка контейнеров..."
docker compose down
if [ $? -eq 0 ]; then
    echo "✅ Контейнеры остановлены"
else
    echo "❌ Ошибка при остановке контейнеров"
    exit 1
fi

echo ""
echo "💾 Шаг 3/5: Остановка Redis (если запущен)..."
docker compose stop redis 2>/dev/null || true
echo "✅ Redis остановлен (если был запущен)"

echo ""
echo "🔨 Шаг 4/5: Сборка образов (без кеша)..."
docker compose build --no-cache
if [ $? -eq 0 ]; then
    echo "✅ Образы собраны успешно"
else
    echo "❌ Ошибка при сборке образов"
    exit 1
fi

echo ""
echo "▶️  Шаг 5/5: Запуск контейнеров..."
docker compose up -d
if [ $? -eq 0 ]; then
    echo "✅ Контейнеры запущены"
    echo ""
    echo "⏳ Ожидание готовности Redis..."
    sleep 3
    docker compose ps redis | grep -q "Up" && echo "✅ Redis запущен" || echo "⚠️  Redis не запущен (работаем без БД)"
else
    echo "❌ Ошибка при запуске контейнеров"
    exit 1
fi

echo ""
echo "🎉 Обновление завершено успешно!"
echo ""
echo "📊 Статус контейнеров:"
docker compose ps
