#!/bin/bash
# Скрипт для исправления проблем со статическими файлами и проверки nginx
# Запустить на сервере: bash fix-static-files.sh

set -e

cd /opt/KidsGames/Server/Content/WebEcosystem

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

# 1. Проверка наличия папки .next
echo "1. Проверка папки .next:"
if [ -d ".next" ]; then
    echo "   ✓ Папка .next существует"
    if [ -d ".next/static" ]; then
        echo "   ✓ Папка .next/static существует"
        STATIC_COUNT=$(find .next/static -type f | wc -l)
        echo "   ✓ Найдено $STATIC_COUNT статических файлов"
    else
        echo "   ✗ Папка .next/static не существует!"
        echo "   Нужно выполнить сборку: npm run build"
    fi
    
    if [ -f ".next/prerender-manifest.json" ]; then
        echo "   ✓ prerender-manifest.json существует"
    else
        echo "   ⚠ prerender-manifest.json отсутствует (может быть нормально для некоторых режимов)"
    fi
else
    echo "   ✗ Папка .next не существует!"
    echo "   Нужно выполнить сборку: npm run build"
fi
echo ""

# 2. Проверка nginx конфигурации
echo "2. Проверка 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 не найдена!"
    exit 1
fi

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

# Проверяем блок для статических файлов
if grep -q "location /webecosystem/_next/" "$NGINX_CONFIG"; then
    echo "   ✓ Блок location /webecosystem/_next/ найден"
    echo "   Содержимое блока:"
    grep -A 12 "location /webecosystem/_next/" "$NGINX_CONFIG" | head -15
else
    echo "   ✗ Блок location /webecosystem/_next/ НЕ найден!"
    echo "   Добавляю блок..."
    
    # Создаем резервную копию
    BACKUP_FILE="${NGINX_CONFIG}.backup.$(date +%Y%m%d_%H%M%S)"
    cp "$NGINX_CONFIG" "$BACKUP_FILE"
    echo "   Резервная копия: $BACKUP_FILE"
    
    # Находим строку с location /webecosystem
    LOCATION_LINE=$(grep -n "^[[:space:]]*location /webecosystem" "$NGINX_CONFIG" | head -1 | cut -d: -f1)
    
    if [ -n "$LOCATION_LINE" ]; then
        # Создаем блок для статики
        STATIC_BLOCK="    # Статические файлы 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;
    }
    
"
        # Вставляем блок перед location /webecosystem
        TEMP_FILE=$(mktemp)
        head -n $((LOCATION_LINE - 1)) "$NGINX_CONFIG" > "$TEMP_FILE"
        echo "$STATIC_BLOCK" >> "$TEMP_FILE"
        tail -n +$LOCATION_LINE "$NGINX_CONFIG" >> "$TEMP_FILE"
        mv "$TEMP_FILE" "$NGINX_CONFIG"
        echo "   ✓ Блок для статических файлов добавлен"
    else
        echo "   ✗ Не удалось найти location /webecosystem"
        exit 1
    fi
fi
echo ""

# Проверяем proxy_pass
if grep -q "proxy_pass http://localhost:3002/webecosystem;" "$NGINX_CONFIG"; then
    echo "   ⚠ Найден неправильный proxy_pass с /webecosystem в конце"
    echo "   Исправляю..."
    sed -i 's|proxy_pass http://localhost:3002/webecosystem;|proxy_pass http://localhost:3002;|g' "$NGINX_CONFIG"
    sed -i 's|proxy_pass http://127.0.0.1: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"
    echo "   Исправляю на 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
echo ""

# 3. Проверка конфигурации nginx
echo "3. Проверка конфигурации nginx:"
if sudo nginx -t 2>&1 | grep -q "test is successful"; then
    echo "   ✓ Конфигурация nginx валидна"
    echo ""
    echo "4. Перезагрузка nginx:"
    sudo systemctl reload nginx
    echo "   ✓ Nginx перезагружен"
else
    echo "   ✗ Ошибка в конфигурации nginx!"
    sudo nginx -t
    exit 1
fi
echo ""

# 5. Проверка переменных окружения и порта
echo "5. Проверка переменных окружения:"
if [ -f .env ]; then
    ENV_PORT=$(grep "^PORT=" .env | cut -d= -f2)
    echo "   PORT в .env: ${ENV_PORT:-не установлен}"
else
    echo "   ⚠ Файл .env не найден"
fi

ECOSYSTEM_PORT=$(grep "PORT:" ecosystem.config.js | head -1 | grep -oE "[0-9]+" || echo "")
echo "   PORT в ecosystem.config.js: ${ECOSYSTEM_PORT:-не найден}"

# Проверяем, на каком порту реально слушает сервер
echo ""
echo "   Проверка портов:"
if ss -tuln | grep -q ":3001.*LISTEN"; then
    echo "   ⚠ Порт 3001 слушается (не должен!)"
fi
if ss -tuln | grep -q ":3002.*LISTEN"; then
    echo "   ✓ Порт 3002 слушается"
else
    echo "   ✗ Порт 3002 НЕ слушается!"
    echo "   Перезапускаю PM2 с обновлением переменных окружения..."
    pm2 restart webecosystem --update-env
    sleep 3
    if ss -tuln | grep -q ":3002.*LISTEN"; then
        echo "   ✓ Порт 3002 теперь слушается"
    else
        echo "   ✗ Порт 3002 все еще не слушается!"
    fi
fi
echo ""

# 6. Проверка доступности статических файлов
echo "6. Проверка доступности:"
echo "   Локально:"
LOCAL_STATUS=$(curl -s -o /dev/null -w "%{http_code}" http://localhost:3002/webecosystem 2>/dev/null || echo "000")
if [ "$LOCAL_STATUS" = "200" ] || [ "$LOCAL_STATUS" = "307" ] || [ "$LOCAL_STATUS" = "302" ]; then
    echo "   ✓ Сервер отвечает (HTTP $LOCAL_STATUS)"
else
    echo "   ⚠ Сервер не отвечает (HTTP $LOCAL_STATUS)"
fi

# 6. Проверка переменных окружения PM2
echo "6. Проверка переменных окружения PM2:"
echo "   Текущий PORT в ecosystem.config.js:"
grep "PORT:" ecosystem.config.js || echo "   PORT не найден в ecosystem.config.js"
echo ""
echo "   Перезапуск PM2 с обновлением переменных окружения:"
pm2 restart webecosystem --update-env
sleep 3
echo ""
echo "   Проверка порта после перезапуска:"
ss -tuln | grep :3002 && echo "   ✓ Порт 3002 слушается" || echo "   ✗ Порт 3002 НЕ слушается!"
echo ""
echo "   Последние строки логов:"
pm2 logs webecosystem --lines 5 --nostream 2>/dev/null | grep -E "Local:|Ready|PORT" || true
echo ""

echo "=== ДИАГНОСТИКА ЗАВЕРШЕНА ==="
echo ""
echo "Проверьте в браузере:"
echo "  https://banana.furtabas.com/webecosystem"
echo ""
echo "Если статические файлы все еще не загружаются:"
echo "  1. Проверьте логи nginx: tail -f /var/log/nginx/error.log"
echo "  2. Проверьте, что сборка выполнена: ls -la .next/static/"
echo "  3. Убедитесь, что PORT=3002 в .env и ecosystem.config.js"
echo "  4. Перезапустите PM2: pm2 restart webecosystem --update-env"

