#!/bin/bash
# План тестирования Домовой Бот
# Запуск: bash tests/run_tests.sh

set -e

echo "============================================================"
echo "🧪 ПЛАН ТЕСТИРОВАНИЯ ДОМОВОЙ БОТ"
echo "============================================================"
echo ""

cd /home/matrixhasyou/domovoy_bot

# =============================================================================
# ЭТАП 1: АВТОМАТИЧЕСКИЕ ПРОВЕРКИ (15 мин)
# =============================================================================

echo "============================================================"
echo "📋 ЭТАП 1: АВТОМАТИЧЕСКИЕ ПРОВЕРКИ"
echo "============================================================"
echo ""

# 1.1 Синтаксис Python
echo "1.1 Проверка синтаксиса Python..."
python3 -m py_compile main.py && echo "✅ main.py"
python3 -m py_compile config.py && echo "✅ config.py"
python3 -m py_compile handlers/admin.py && echo "✅ handlers/admin.py"
python3 -m py_compile handlers/users.py && echo "✅ handlers/users.py"
python3 -m py_compile keyboards/admin_menu.py && echo "✅ keyboards/admin_menu.py"
python3 -m py_compile keyboards/inline.py && echo "✅ keyboards/inline.py"
echo ""

# 1.2 Импорты (через venv)
echo "1.2 Проверка импортов..."
venv/bin/python3 -c "from handlers.admin import router; print('✅ handlers.admin')"
venv/bin/python3 -c "from handlers.users import router; print('✅ handlers.users')"
venv/bin/python3 -c "from keyboards.admin_menu import get_admin_main_menu; print('✅ keyboards.admin_menu')"
venv/bin/python3 -c "from keyboards.inline import get_main_menu; print('✅ keyboards.inline')"
venv/bin/python3 -c "import config; print('✅ config')"
echo ""

# 1.3 Проверка callback_data на критичные дубликаты
echo "1.3 Проверка уникальности callback_data..."
echo "Ищем дубликаты (кроме шаблонных с ID)..."
grep -r "callback_data=" handlers/ keyboards/ | cut -d'"' -f2 | grep -v "_[0-9]*$" | sort | uniq -d || echo "✅ Критичных дубликатов нет"
echo ""

# 1.4 Проверка БД
echo "1.4 Проверка базы данных..."
if [ -f "database/domovoy.db" ]; then
    echo "✅ Файл БД существует"
    sqlite3 database/domovoy.db "SELECT COUNT(*) FROM user;" 2>/dev/null && echo "✅ Таблица user существует" || echo "⚠️ Таблица user не найдена"
else
    echo "⚠️ Файл БД не найден (это нормально для тестов)"
fi
echo ""

# =============================================================================
# ЭТАП 2: РУЧНОЕ ТЕСТИРОВАНИЕ В TELEGRAM (60 мин)
# =============================================================================

echo "============================================================"
echo "📋 ЭТАП 2: РУЧНОЕ ТЕСТИРОВАНИЕ В TELEGRAM"
echo "============================================================"
echo ""
echo "Запустите бота: ./start.sh"
echo ""
echo "Тесты для админа:"
echo "  1. /admin - показать меню"
echo "  2. Нажать '📊 Статистика' - должен показать статистику"
echo "  3. Нажать '🕵️ Шпионы' - должен показать список"
echo "  4. Нажать '👥 Пользователи' - должен показать список"
echo "  5. Нажать '🏆 Рейтинг' - должен показать топ-10"
echo "  6. Нажать '☠️ Токсичность' - должно показать подменю"
echo "  7. Нажать '🔇 Муты' - должен показать список"
echo "  8. Нажать '🚫 Баны' - должен показать список"
echo "  9. Нажать '🔍 Поиск' - должно показать подменю"
echo "  10. Нажать '👤 Действия' - должен показать список с пагинацией"
echo "  11. Выбрать пользователя - должно показать меню действий"
echo "  12. Нажать '🚫 Забанить' → '✅ Да' - должен забанить"
echo "  13. Нажать '⚠️ Предупреждения' - должно показать подменю"
echo "  14. Нажать '📋 Стоп-слова' - должен показать список"
echo "  15. Нажать на слово - должно удалить"
echo "  16. Нажать '➕ Добавить слово' → ввести слово - должно добавить"
echo ""
echo "Тесты для пользователя:"
echo "  1. /start - показать главное меню"
echo "  2. Нажать '🏆 Достижения' - должен показать достижения"
echo "  3. Нажать '📅 События' - должен показать события"
echo "  4. Нажать '💰 Платежи' - должен показать платежи"
echo "  5. Нажать '📋 Опросы' - должен показать опросы"
echo "  6. Нажать '📊 Токсичность' - должен показать топ"
echo "  7. Нажать '🏠 Темы чата' - должен показать темы"
echo "  8. Нажать '🙏 Поблагодарить' - должен показать список"
echo "  9. Выбрать пользователя → подтвердить - должно начислить +10"
echo "  10. Нажать '🔍 Моя квартира' - должно показать инфо"
echo ""

# =============================================================================
# ЭТАП 3: ПРОВЕРКА ЛОГОВ (5 мин)
# =============================================================================

echo "============================================================"
echo "📋 ЭТАП 3: ПРОВЕРКА ЛОГОВ"
echo "============================================================"
echo ""
echo "Проверьте файл логов:"
echo "  tail -f logs/bot.log"
echo ""
echo "Ищите:"
echo "  - Ошибки (ERROR)"
echo "  - Предупреждения (WARNING)"
echo "  - Критичные исключения"
echo ""

# =============================================================================
# ЭТАП 4: НАГРУЗОЧНОЕ ТЕСТИРОВАНИЕ (15 мин)
# =============================================================================

echo "============================================================"
echo "📋 ЭТАП 4: НАГРУЗОЧНОЕ ТЕСТИРОВАНИЕ"
echo "============================================================"
echo ""
echo "1. Проверка пагинации при 200+ пользователях:"
echo "   /admin → 👤 Действия → листать страницы"
echo ""
echo "2. Проверка пагинации при 500+ стоп-словах:"
echo "   /admin → ⚠️ Предупреждения → 📋 Стоп-слова → листать"
echo ""
echo "3. Проверка одновременных действий:"
echo "   Два админа одновременно жмут кнопки"
echo ""

# =============================================================================
# ЭТАП 5: ПРОВЕРКА БЕЗОПАСНОСТИ (10 мин)
# =============================================================================

echo "============================================================"
echo "📋 ЭТАП 5: ПРОВЕРКА БЕЗОПАСНОСТИ"
echo "============================================================"
echo ""
echo "1. Обычный пользователь жмёт админ-кнопки:"
echo "   Ожидается: 'Нет прав'"
echo ""
echo "2. Ввод некорректных данных в FSM:"
echo "   Ожидается:Graceful error, не краш"
echo ""
echo "3. Пустые списки:"
echo "   Ожидается: 'Нет данных', не ошибка"
echo ""

# =============================================================================
# ИТОГ
# =============================================================================

echo ""
echo "============================================================"
echo "✅ ПЛАН ТЕСТИРОВАНИЯ ЗАВЕРШЁН"
echo "============================================================"
echo ""
echo "Время выполнения:"
echo "  - Этап 1 (авто): 15 мин"
echo "  - Этап 2 (ручное): 60 мин"
echo "  - Этап 3 (логи): 5 мин"
echo "  - Этап 4 (нагрузка): 15 мин"
echo "  - Этап 5 (безопасность): 10 мин"
echo "  - Итого: ~105 мин"
echo ""
echo "Результаты записывайте в файл tests/test_results.md"
echo ""
