#!/bin/bash
# scripts/diagnose-server.sh - Диагностика проблем на сервере

set -e

echo "🔍 Диагностика сервера CatLink..."
echo "================================="

echo ""
echo "📊 1. Статус Docker контейнеров:"
docker ps -a --format "table {{.Names}}\t{{.Status}}\t{{.Ports}}"

echo ""
echo "🔗 2. Статус сетей Docker:"
docker network ls

echo ""
echo "📡 3. Проверка подключения к базе данных:"
echo "   Тестируем подключение из контейнера web к базе данных..."
if docker-compose exec -T web python -c "
import os
import django
os.environ.setdefault('DJANGO_SETTINGS_MODULE', 'backend.settings')
django.setup()
from django.db import connection
try:
    with connection.cursor() as cursor:
        cursor.execute('SELECT 1')
        print('✅ Подключение к базе данных успешно')
except Exception as e:
    print(f'❌ Ошибка подключения к БД: {e}')
" 2>/dev/null; then
    echo "✅ База данных доступна"
else
    echo "❌ База данных недоступна"
fi

echo ""
echo "👥 4. Данные пользователей в базе:"
if docker-compose exec -T db psql -U links_user -d links_db -c "SELECT COUNT(*) as user_count FROM users_user;" 2>/dev/null; then
    echo "✅ Таблица пользователей доступна"
    docker-compose exec -T db psql -U links_user -d links_db -c "SELECT id, username, email, is_active, is_staff, is_superuser FROM users_user ORDER BY date_joined DESC LIMIT 5;"
else
    echo "❌ Не удается получить данные пользователей"
fi

echo ""
echo "🌐 5. Проверка nginx конфигурации:"
if sudo nginx -t 2>/dev/null; then
    echo "✅ Конфигурация nginx корректна"
else
    echo "❌ Ошибка в конфигурации nginx"
fi

echo ""
echo "🔧 6. Статус nginx сервиса:"
sudo systemctl status nginx --no-pager -l

echo ""
echo "🚪 7. Проверка портов:"
echo "   Порты, которые слушает система:"
sudo netstat -tlnp | grep -E ":(80|443|3000|8000|5432)" || echo "Нет активных портов"

echo ""
echo "📋 8. Логи nginx (последние 10 строк):"
sudo tail -10 /var/log/nginx/error.log 2>/dev/null || echo "Логи nginx недоступны"

echo ""
echo "📋 9. Логи Docker контейнеров:"
echo "   --- Web контейнер (последние 5 строк) ---"
docker-compose logs --tail=5 web 2>/dev/null || echo "Логи web недоступны"

echo ""
echo "   --- Frontend контейнер (последние 5 строк) ---"
docker-compose logs --tail=5 frontend 2>/dev/null || echo "Логи frontend недоступны"

echo ""
echo "🔗 10. Тест API эндпоинтов локально:"
echo "   Тестируем доступность API..."
if curl -s -o /dev/null -w "%{http_code}" http://localhost:8000/admin/ | grep -q "200\|302"; then
    echo "✅ Django admin доступен по http://localhost:8000/admin/"
else
    echo "❌ Django admin недоступен по http://localhost:8000/admin/"
fi

if curl -s -o /dev/null -w "%{http_code}" http://localhost:8000/api/ | grep -q "200\|404"; then
    echo "✅ Django API доступен по http://localhost:8000/api/"
else
    echo "❌ Django API недоступен по http://localhost:8000/api/"
fi

if curl -s -o /dev/null -w "%{http_code}" http://localhost:3000/ | grep -q "200"; then
    echo "✅ Frontend доступен по http://localhost:3000/"
else
    echo "❌ Frontend недоступен по http://localhost:3000/"
fi

echo ""
echo "🌍 11. Тест внешних эндпоинтов:"
echo "   Тестируем доступность через nginx..."
if curl -s -o /dev/null -w "%{http_code}" http://localhost/admin/ | grep -q "200\|302"; then
    echo "✅ Admin доступен через nginx: http://localhost/admin/"
else
    echo "❌ Admin недоступен через nginx: http://localhost/admin/"
fi

if curl -s -o /dev/null -w "%{http_code}" http://localhost/api/ | grep -q "200\|404"; then
    echo "✅ API доступен через nginx: http://localhost/api/"
else
    echo "❌ API недоступен через nginx: http://localhost/api/"
fi

echo ""
echo "🔐 12. SSL сертификаты:"
if [ -d "/etc/letsencrypt/live" ]; then
    echo "✅ Директория SSL сертификатов существует:"
    sudo ls -la /etc/letsencrypt/live/ 2>/dev/null || echo "Не удается прочитать директорию сертификатов"
else
    echo "❌ SSL сертификаты не найдены"
fi

echo ""
echo "📄 13. Переменные окружения (.env):"
echo "   Проверяем ключевые переменные..."
if [ -f ".env" ]; then
    echo "✅ Файл .env существует"
    echo "   DJANGO_DEBUG: $(grep '^DJANGO_DEBUG=' .env | cut -d= -f2)"
    echo "   NEXT_PUBLIC_API_URL: $(grep '^NEXT_PUBLIC_API_URL=' .env | cut -d= -f2)"
    echo "   DATABASE_HOST: $(grep '^DATABASE_HOST=' .env | cut -d= -f2)"
else
    echo "❌ Файл .env не найден"
fi

echo ""
echo "🏁 Диагностика завершена!"
echo "================================="