#!/bin/bash
# Скрипт для применения всех исправлений на сервере
# Запустить на сервере: bash apply-fixes.sh

set -e

cd /opt/KidsGames/Server/Content/WebEcosystem

echo "=== ПРИМЕНЕНИЕ ИСПРАВЛЕНИЙ ==="
echo ""

# 1. Пересборка Next.js приложения
echo "1. Пересборка Next.js приложения..."
if [ ! -d ".next" ] || [ ! -f ".next/prerender-manifest.json" ]; then
    echo "   Папка .next отсутствует или неполная, запускаю сборку..."
    npm run build
    echo "✓ Сборка завершена"
else
    echo "   Папка .next существует, но пересобираю для надежности..."
    npm run build
    echo "✓ Пересборка завершена"
fi
echo ""

# 2. Перезапуск PM2
echo "2. Перезапуск PM2 webecosystem..."
pm2 restart webecosystem --update-env
sleep 3
pm2 list | grep webecosystem
echo "✓ PM2 перезапущен"
echo ""

# 3. Исправление nginx конфигурации
echo "3. Проверка и исправление nginx конфигурации..."

NGINX_CONFIG=""
if [ -f /etc/nginx/sites-available/banana.furtabas.com ]; then
    NGINX_CONFIG="/etc/nginx/sites-available/banana.furtabas.com"
elif [ -f /etc/nginx/sites-enabled/banana.furtabas.com ]; then
    NGINX_CONFIG="/etc/nginx/sites-enabled/banana.furtabas.com"
else
    NGINX_CONFIG=$(grep -r "banana.furtabas.com" /etc/nginx/ 2>/dev/null | head -1 | cut -d: -f1)
fi

if [ -z "$NGINX_CONFIG" ] || [ ! -f "$NGINX_CONFIG" ]; then
    echo "✗ Конфигурация nginx не найдена!"
    echo "   Нужно вручную обновить конфигурацию согласно nginx-webecosystem.conf.example"
    exit 1
fi

echo "   Конфигурация найдена: $NGINX_CONFIG"

# Создаем резервную копию
BACKUP_FILE="${NGINX_CONFIG}.backup.$(date +%Y%m%d_%H%M%S)"
cp "$NGINX_CONFIG" "$BACKUP_FILE"
echo "   Резервная копия создана: $BACKUP_FILE"

# Проверяем и исправляем proxy_pass
if grep -q "proxy_pass http://localhost:3002/webecosystem;" "$NGINX_CONFIG"; then
    echo "   Исправляю proxy_pass (убираю /webecosystem)..."
    sed -i 's|proxy_pass http://localhost:3002/webecosystem;|proxy_pass http://localhost:3002;|g' "$NGINX_CONFIG"
    echo "✓ proxy_pass исправлен"
elif grep -q "proxy_pass http://127.0.0.1:3001" "$NGINX_CONFIG"; then
    echo "   Исправляю proxy_pass (меняю порт 3001 на 3002)..."
    sed -i 's|proxy_pass http://127.0.0.1:3001|proxy_pass http://localhost:3002|g' "$NGINX_CONFIG"
    sed -i 's|proxy_pass http://localhost:3001|proxy_pass http://localhost:3002|g' "$NGINX_CONFIG"
    echo "✓ proxy_pass исправлен (порт изменен на 3002)"
else
    echo "   proxy_pass уже правильный или не найден"
fi

# Проверяем наличие блока для статических файлов
if ! grep -q "location /webecosystem/_next/" "$NGINX_CONFIG"; then
    echo "   Добавляю блок для статических файлов /webecosystem/_next/..."
    
    # Находим строку с location /webecosystem
    LOCATION_LINE=$(grep -n "location /webecosystem {" "$NGINX_CONFIG" | head -1 | cut -d: -f1)
    
    if [ -n "$LOCATION_LINE" ]; then
        # Создаем временный файл с блоком для статики
        STATIC_BLOCK=$(cat <<'EOF'
    # Статические файлы Next.js (_next/static, _next/image)
    location /webecosystem/_next/ {
        proxy_pass http://localhost:3002;
        proxy_http_version 1.1;
        proxy_set_header Host $host;
        proxy_set_header X-Real-IP $remote_addr;
        proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
        proxy_set_header X-Forwarded-Proto $scheme;
        
        proxy_cache_valid 200 60m;
        add_header Cache-Control "public, immutable";
        
        rewrite ^/webecosystem/_next/(.*) /_next/$1 break;
    }
    
EOF
)
        # Вставляем блок перед location /webecosystem
        # Используем временный файл для безопасной вставки
        TEMP_FILE=$(mktemp)
        head -n $((LOCATION_LINE - 1)) "$NGINX_CONFIG" > "$TEMP_FILE"
        printf "%s" "$STATIC_BLOCK" >> "$TEMP_FILE"
        tail -n +$LOCATION_LINE "$NGINX_CONFIG" >> "$TEMP_FILE"
        mv "$TEMP_FILE" "$NGINX_CONFIG"
        echo "✓ Блок для статических файлов добавлен"
    else
        echo "✗ Не удалось найти location /webecosystem для вставки блока"
        echo "   Нужно вручную добавить блок согласно nginx-webecosystem.conf.example"
    fi
else
    echo "   Блок для статических файлов уже существует"
fi

echo ""

# 4. Проверка конфигурации nginx
echo "4. Проверка конфигурации nginx..."
if sudo nginx -t 2>&1 | grep -q "test is successful"; then
    echo "✓ Конфигурация nginx валидна"
    echo ""
    echo "5. Перезагрузка nginx..."
    sudo systemctl reload nginx
    echo "✓ Nginx перезагружен"
else
    echo "✗ Ошибка в конфигурации nginx!"
    echo "   Вывод проверки:"
    sudo nginx -t
    echo ""
    echo "   Восстанавливаю резервную копию..."
    cp "$BACKUP_FILE" "$NGINX_CONFIG"
    echo "   Резервная копия восстановлена. Проверьте конфигурацию вручную."
    exit 1
fi

echo ""
echo "=== ИСПРАВЛЕНИЯ ПРИМЕНЕНЫ ==="
echo ""
echo "Проверьте результат:"
echo "  pm2 logs webecosystem --lines 10"
echo "  curl -I http://localhost:3002/webecosystem"
echo "  curl -I https://banana.furtabas.com/webecosystem"
echo ""
echo "Если что-то пошло не так, восстановите резервную копию:"
echo "  sudo cp $BACKUP_FILE $NGINX_CONFIG"
echo "  sudo nginx -t && sudo systemctl reload nginx"

