#!/bin/bash
# Скрипт для диагностики и исправления проблем 404/502
# Запустить на сервере: bash fix-server.sh

set -e

cd /opt/KidsGames/Server/Content/WebEcosystem

echo "=== ДИАГНОСТИКА И ИСПРАВЛЕНИЕ WEBECOSYSTEM ==="
echo ""

# 1. Проверка PM2
echo "1. Статус PM2 процессов:"
pm2 list
echo ""

# 2. Проверка порта 3002
echo "2. Проверка порта 3002:"
if ss -tuln | grep -q ":3002"; then
    echo "✓ Порт 3002 слушается"
else
    echo "✗ Порт 3002 НЕ слушается!"
fi
echo ""

# 3. Проверка переменных окружения
echo "3. Проверка переменных окружения (.env):"
if [ ! -f .env ]; then
    echo "✗ Файл .env не найден! Создаю из env.example..."
    if [ -f env.example ]; then
        cp env.example .env
        echo "✓ Файл .env создан"
    else
        echo "✗ env.example не найден!"
    fi
fi

# Проверяем и обновляем переменные
if [ -f .env ]; then
    echo "Текущие значения:"
    grep -E 'PORT|NEXT_PUBLIC_BASE_PATH|NEXTAUTH_URL' .env || echo "Переменные не найдены"
    echo ""
    
    # Обновляем PORT если нужно
    if ! grep -q "^PORT=3002" .env; then
        if grep -q "^PORT=" .env; then
            sed -i 's/^PORT=.*/PORT=3002/' .env
        else
            echo "PORT=3002" >> .env
        fi
        echo "✓ PORT установлен в 3002"
    fi
    
    # Обновляем NEXT_PUBLIC_BASE_PATH если нужно
    if ! grep -q "^NEXT_PUBLIC_BASE_PATH=/webecosystem" .env; then
        if grep -q "^NEXT_PUBLIC_BASE_PATH=" .env; then
            sed -i 's|^NEXT_PUBLIC_BASE_PATH=.*|NEXT_PUBLIC_BASE_PATH=/webecosystem|' .env
        else
            echo "NEXT_PUBLIC_BASE_PATH=/webecosystem" >> .env
        fi
        echo "✓ NEXT_PUBLIC_BASE_PATH установлен в /webecosystem"
    fi
    
    # Обновляем NEXTAUTH_URL если нужно
    if ! grep -q "^NEXTAUTH_URL=https://banana.furtabas.com/webecosystem" .env; then
        if grep -q "^NEXTAUTH_URL=" .env; then
            sed -i 's|^NEXTAUTH_URL=.*|NEXTAUTH_URL="https://banana.furtabas.com/webecosystem"|' .env
        else
            echo 'NEXTAUTH_URL="https://banana.furtabas.com/webecosystem"' >> .env
        fi
        echo "✓ NEXTAUTH_URL обновлен"
    fi
    
    echo ""
    echo "Обновленные значения:"
    grep -E 'PORT|NEXT_PUBLIC_BASE_PATH|NEXTAUTH_URL' .env
fi
echo ""

# 4. Логи PM2 webecosystem
echo "4. Последние 30 строк логов PM2 webecosystem:"
if pm2 list | grep -q "webecosystem"; then
    pm2 logs webecosystem --lines 30 --nostream 2>/dev/null || true
else
    echo "✗ Процесс webecosystem не найден в PM2"
fi
echo ""

# 5. Проверка nginx конфигурации
echo "5. Проверка nginx конфигурации для /webecosystem:"
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 [ -n "$NGINX_CONFIG" ] && [ -f "$NGINX_CONFIG" ]; then
    echo "Конфигурация найдена: $NGINX_CONFIG"
    if grep -q "location /webecosystem" "$NGINX_CONFIG"; then
        echo "✓ location /webecosystem найден"
        grep -A 10 "location /webecosystem" "$NGINX_CONFIG" | head -15
    else
        echo "✗ location /webecosystem НЕ найден!"
    fi
else
    echo "✗ Конфигурация nginx для banana.furtabas.com не найдена!"
fi
echo ""

# 6. Логи nginx ошибок
echo "6. Последние 20 строк логов nginx (ошибки):"
if [ -f /var/log/nginx/error.log ]; then
    tail -20 /var/log/nginx/error.log
else
    echo "Логи nginx недоступны"
fi
echo ""

# 7. Проверка доступности Next.js сервера локально
echo "7. Проверка доступности localhost:3002:"
if curl -s -o /dev/null -w "HTTP Status: %{http_code}\n" http://localhost:3002/webecosystem 2>/dev/null; then
    echo "✓ Сервер отвечает"
else
    echo "✗ Сервер НЕ отвечает на localhost:3002"
fi
echo ""

# 8. Проверка процесса Node.js на порту 3002
echo "8. Процессы Node.js:"
ps aux | grep -E "node|next" | grep -v grep || echo "Процессы Node.js не найдены"
echo ""

# 9. Рекомендации по исправлению
echo "=== РЕКОМЕНДАЦИИ ==="
echo ""

if ! ss -tuln | grep -q ":3002"; then
    echo "⚠ Порт 3002 не слушается. Нужно запустить/перезапустить PM2:"
    echo "   pm2 restart webecosystem"
    echo ""
fi

if ! pm2 list | grep -q "webecosystem"; then
    echo "⚠ Процесс webecosystem не найден в PM2. Нужно запустить:"
    echo "   cd /opt/KidsGames/Server/Content/WebEcosystem"
    echo "   pm2 start ecosystem.config.js"
    echo ""
fi

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

# Перезапуск PM2 если нужно
if pm2 list | grep -q "webecosystem"; then
    echo "Перезапуск PM2 webecosystem..."
    pm2 restart webecosystem
    sleep 2
    echo "✓ PM2 перезапущен"
    pm2 logs webecosystem --lines 10 --nostream 2>/dev/null || true
else
    echo "⚠ Процесс webecosystem не найден. Запуск..."
    pm2 start ecosystem.config.js || echo "✗ Не удалось запустить PM2"
fi
echo ""

# Проверка nginx конфигурации и предложение обновить
if [ -n "$NGINX_CONFIG" ] && [ -f "$NGINX_CONFIG" ]; then
    if ! grep -q "location /webecosystem/_next/" "$NGINX_CONFIG"; then
        echo "⚠ В nginx конфигурации отсутствует отдельный блок для статических файлов /webecosystem/_next/"
        echo "  Рекомендуется обновить конфигурацию согласно nginx-webecosystem.conf.example"
        echo "  После обновления выполните: sudo nginx -t && sudo systemctl reload nginx"
    else
        echo "✓ Nginx конфигурация содержит блок для статических файлов"
    fi
fi
echo ""

echo "=== ДИАГНОСТИКА И ИСПРАВЛЕНИЯ ЗАВЕРШЕНЫ ==="
echo ""
echo "Проверьте статус:"
echo "  pm2 list"
echo "  ss -tuln | grep :3002"
echo "  curl http://localhost:3002/webecosystem"
echo ""
echo "Если нужно обновить nginx:"
echo "  sudo nginx -t && sudo systemctl reload nginx"

