#!/usr/bin/env python3
"""
Комплексное тестирование бота
Проверяет все кнопки для всех уровней доступа
"""
import asyncio
from sqlalchemy import select, func
from database.db import AsyncSessionLocal
from database.models import User, Service, InitiativeGroup
from config import ADMIN_USER_ID

async def test_all():
    print("=" * 60)
    print("🧪 КОМПЛЕКСНОЕ ТЕСТИРОВАНИЕ БОТА")
    print("=" * 60)
    
    async with AsyncSessionLocal() as session:
        # Статистика
        total = (await session.execute(select(func.count(User.user_id)))).scalar()
        verified = (await session.execute(select(func.count(User.user_id)).where(User.verified == True))).scalar()
        unverified = total - verified
        
        # ИГ
        ig_stmt = select(func.count(InitiativeGroup.id)).where(InitiativeGroup.is_active == True)
        ig_count = (await session.execute(ig_stmt)).scalar()
        
        # Админы
        admin_count = (await session.execute(select(func.count(User.user_id)).where(User.is_admin == True))).scalar()
        
        print(f"\n📊 СТАТИСТИКА:")
        print(f"   Всего пользователей: {total}")
        print(f"   ✅ Верифицированы: {verified}")
        print(f"   ⏳ Не верифицированы: {unverified}")
        print(f"   🔵 ИГ: {ig_count}")
        print(f"   🟡 Админы: {admin_count}")
        print(f"   🟣 Суперадмин: {ADMIN_USER_ID}")
        
        # Проверка суперадмина
        superadmin = await session.get(User, ADMIN_USER_ID)
        print(f"\n👤 СУПЕРАДМИН:")
        if superadmin:
            print(f"   Имя: {superadmin.first_name}")
            print(f"   Квартира: {superadmin.apartment or '—'}")
            print(f"   Верификация: {'✅' if superadmin.verified else '❌'}")
            print(f"   Админ: {'✅' if superadmin.is_admin else '❌'}")
            
            # Проверка ИГ
            ig_member = await session.get(InitiativeGroup, ADMIN_USER_ID)
            print(f"   ИГ: {'✅' if ig_member and ig_member.is_active else '❌'}")
        else:
            print(f"   ❌ НЕ НАЙДЕН В БАЗЕ!")
        
        # Проверка мастеров
        masters = await session.execute(
            select(Service).where(Service.category.in_(['masters', 'plumber', 'electrician']))
        )
        masters_count = len(list(masters.scalars().all()))
        print(f"\n👷 МАСТЕРА:")
        print(f"   В базе: {masters_count}")
        if masters_count == 0:
            print(f"   ⚠️ НУЖНО ЗАПОЛНИТЬ!")
        
        # Проверка телефонов
        phones = await session.execute(
            select(Service).where(Service.category == 'emergency')
        )
        phones_count = len(list(phones.scalars().all()))
        print(f"\n📞 ЭКСТРЕННЫЕ:")
        print(f"   В базе: {phones_count}")
        if phones_count == 0:
            print(f"   ⚠️ НУЖНО ЗАПОЛНИТЬ!")
        
        print("\n" + "=" * 60)
        print("✅ ТЕСТИРОВАНИЕ ЗАВЕРШЕНО")
        print("=" * 60)

if __name__ == '__main__':
    asyncio.run(test_all())
