#!/usr/bin/env python3
"""
Импорт всех участников группы в базу данных
Прямой запрос к Telegram API
"""
import asyncio
import logging
import aiohttp
from datetime import datetime
from sqlalchemy import select
from database.db import AsyncSessionLocal, init_db
from database.models import User
from config import BOT_TOKEN, ADMIN_CHAT_ID, get_proxy_url
from aiohttp_socks import ProxyConnector

logging.basicConfig(level=logging.INFO)
logger = logging.getLogger(__name__)


async def import_group_members():
    """Импортировать всех участников группы"""
    
    await init_db()
    
    proxy_url = get_proxy_url()
    logger.info(f'🔒 Прокси: {proxy_url}')
    
    # Создаём коннектор с прокси
    connector = ProxyConnector.from_url(proxy_url)
    
    async with aiohttp.ClientSession(connector=connector) as session:
        # Получаем список администраторов (это все кто есть в чате)
        async with session.get(
            f"https://api.telegram.org/bot{BOT_TOKEN}/getChatAdministrators",
            params={"chat_id": ADMIN_CHAT_ID}
        ) as resp:
            result = await resp.json()
            
            if not result.get('ok'):
                logger.error(f'Ошибка API: {result}')
                return
            
            members = result.get('result', [])
            logger.info(f'📊 Найдено участников: {len(members)}')
            
            async with AsyncSessionLocal() as db_session:
                added = 0
                updated = 0
                
                for member in members:
                    # member это dict с ключом 'user'
                    user_data = member.get('user', {})
                    user_id = user_data.get('id')
                    
                    if not user_id:
                        continue
                    
                    # Проверяем есть ли в базе
                    existing = await db_session.get(User, user_id)
                    
                    if existing:
                        # Обновляем данные
                        username = user_data.get('username')
                        first_name = user_data.get('first_name')
                        last_name = user_data.get('last_name')
                        
                        if username:
                            existing.username = username
                        if first_name:
                            existing.first_name = first_name
                        if last_name:
                            existing.last_name = last_name
                        # Верифицируем!
                        if not existing.verified:
                            existing.verified = True
                            existing.verification_date = datetime.utcnow()
                        updated += 1
                    else:
                        # Добавляем нового
                        new_user = User(
                            user_id=user_id,
                            username=user_data.get('username'),
                            first_name=user_data.get('first_name'),
                            last_name=user_data.get('last_name'),
                            verified=True,  # Сразу верифицируем!
                            verification_date=datetime.utcnow(),
                            message_count=0,
                        )
                        db_session.add(new_user)
                        added += 1
                
                await db_session.commit()
                
                logger.info(f'✅ Добавлено: {added}')
                logger.info(f'🔄 Обновлено: {updated}')
                logger.info(f'💾 Итого в базе: {added + updated}')


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