#!/usr/bin/env python3
"""
БЫСТРАЯ АВТОРИЗАЦИЯ И ПАРСИНГ

Авторизуется через ваш личный Telegram и сразу парсит 822 сообщения
"""

import asyncio
from telethon import TelegramClient
from datetime import datetime

# API ключи
API_ID = 27637277
API_HASH = '8d1655ab08162698e7bfce8afe9fc73a'

# Настройки парсинга
DISCUSSION_GROUP_ID = -1001592654869
MESSAGES_TO_ANALYZE = 822
OUTPUT_FILE = '/var/www/wsalesite.ru/avatar/chat_users_list.txt'

async def main():
    print("=" * 70)
    print("🚀 АВТОРИЗАЦИЯ И ПАРСИНГ 822 СООБЩЕНИЙ")
    print("=" * 70)
    print("\n⚠️  ВАЖНО: Используется ЛИЧНЫЙ Telegram аккаунт (не бот!)")
    print("   Telegram запрещает ботам читать историю сообщений.\n")
    print("=" * 70 + "\n")
    
    # Подключаемся через личный аккаунт
    client = TelegramClient('avatar_user_session', API_ID, API_HASH)
    await client.start()
    
    try:
        me = await client.get_me()
        print(f"✅ Авторизован: {me.first_name} (@{me.username or 'без username'})")
        print(f"   ID: {me.id}")
        print(f"   Телефон: {me.phone}\n")
        
        # Получаем группу
        print("🔍 Подключаемся к группе...")
        chat = await client.get_entity(DISCUSSION_GROUP_ID)
        print(f"✅ Группа: {getattr(chat, 'title', 'N/A')}")
        print(f"   ID: {chat.id}\n")
        
        # ПАРСИМ сообщения
        print(f"🔍 ПАРСИНГ {MESSAGES_TO_ANALYZE} сообщений...")
        print("-" * 70)
        
        users_dict = {}
        processed = 0
        
        async for message in client.iter_messages(
            entity=DISCUSSION_GROUP_ID,
            limit=MESSAGES_TO_ANALYZE
        ):
            processed += 1
            
            if processed % 100 == 0:
                print(f"   Обработано: {processed}/{MESSAGES_TO_ANALYZE}")
            
            if not message.sender:
                continue
            
            sender = message.sender
            user_id = sender.id
            
            if user_id in users_dict:
                users_dict[user_id]['message_count'] += 1
            else:
                users_dict[user_id] = {
                    'username': getattr(sender, 'username', None),
                    'first_name': getattr(sender, 'first_name', ''),
                    'last_name': getattr(sender, 'last_name', ''),
                    'message_count': 1,
                    'is_bot': getattr(sender, 'bot', False)
                }
        
        print(f"   ✅ Обработано: {processed} сообщений\n")
        
        if not users_dict:
            print("⚠️  Не найдено сообщений с авторами")
            return
        
        # Формируем результат
        print("💾 Сохраняем результаты...")
        print("-" * 70 + "\n")
        
        output = f"# Ники пользователей из группы обсуждений @applifegame\n"
        output += f"# Дата: {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}\n"
        output += f"# Метод: Личный аккаунт (MTProto API)\n"
        output += f"# Обработано: {processed} сообщений\n"
        output += f"# Уникальных: {len(users_dict)} пользователей\n"
        output += "=" * 70 + "\n\n"
        
        # Сортируем по активности
        sorted_users = sorted(
            users_dict.items(),
            key=lambda x: x[1]['message_count'],
            reverse=True
        )
        
        # Раздел 1: По активности
        output += "## ПОЛЬЗОВАТЕЛИ ПО АКТИВНОСТИ (от самых активных)\n"
        output += "=" * 70 + "\n\n"
        
        for user_id, user_data in sorted_users:
            if user_data['username']:
                identifier = f"@{user_data['username']}"
            else:
                first = user_data['first_name'] or ''
                last = user_data['last_name'] or ''
                identifier = f"{first} {last}".strip() or f"ID:{user_id}"
            
            bot_mark = " [БОТ]" if user_data['is_bot'] else ""
            output += f"{identifier}{bot_mark} - {user_data['message_count']} сообщений\n"
        
        output += "\n"
        
        # Раздел 2: Простой список
        output += "=" * 70 + "\n"
        output += f"## СПИСОК ВСЕХ НИКОВ (алфавитный, всего: {len(users_dict)})\n"
        output += "=" * 70 + "\n\n"
        
        simple_list = []
        for user_id, user_data in users_dict.items():
            if user_data['username']:
                simple_list.append(f"@{user_data['username']}")
            else:
                first = user_data['first_name'] or ''
                last = user_data['last_name'] or ''
                full_name = f"{first} {last}".strip()
                simple_list.append(full_name if full_name else f"ID:{user_id}")
        
        for nickname in sorted(simple_list):
            output += f"{nickname}\n"
        
        # Раздел 3: Статистика
        output += "\n" + "=" * 70 + "\n"
        output += "## СТАТИСТИКА\n"
        output += "=" * 70 + "\n\n"
        
        users_with_username = sum(1 for u in users_dict.values() if u['username'])
        users_without_username = len(users_dict) - users_with_username
        bots_count = sum(1 for u in users_dict.values() if u['is_bot'])
        total_messages = sum(u['message_count'] for u in users_dict.values())
        
        output += f"Всего уникальных пользователей: {len(users_dict)}\n"
        output += f"С username: {users_with_username}\n"
        output += f"Без username: {users_without_username}\n"
        output += f"Ботов: {bots_count}\n"
        output += f"Обработано сообщений: {processed}\n"
        output += f"Всего сообщений от пользователей: {total_messages}\n"
        output += f"Среднее сообщений на пользователя: {total_messages / len(users_dict):.1f}\n"
        
        output += f"\nТоп-3 самых активных:\n"
        for i, (user_id, user_data) in enumerate(sorted_users[:3], 1):
            if user_data['username']:
                identifier = f"@{user_data['username']}"
            else:
                first = user_data['first_name'] or ''
                last = user_data['last_name'] or ''
                identifier = f"{first} {last}".strip() or f"ID:{user_id}"
            output += f"   {i}. {identifier} - {user_data['message_count']} сообщений\n"
        
        # Сохраняем
        with open(OUTPUT_FILE, 'w', encoding='utf-8') as f:
            f.write(output)
        
        # Выводим итоги
        print("=" * 70)
        print("✅ ГОТОВО! ФАЙЛ СОЗДАН!")
        print("=" * 70)
        print(f"📊 Статистика:")
        print(f"   - Обработано сообщений: {processed}")
        print(f"   - Уникальных пользователей: {len(users_dict)}")
        print(f"   - С username: {users_with_username}")
        print(f"   - Без username: {users_without_username}")
        print(f"   - Ботов: {bots_count}")
        print(f"   - Файл: {OUTPUT_FILE}")
        print("=" * 70)
        
        print(f"\n📋 Топ-3 самых активных:")
        for i, (user_id, user_data) in enumerate(sorted_users[:3], 1):
            if user_data['username']:
                identifier = f"@{user_data['username']}"
            else:
                first = user_data['first_name'] or ''
                last = user_data['last_name'] or ''
                identifier = f"{first} {last}".strip() or f"ID:{user_id}"
            print(f"   {i}. {identifier} - {user_data['message_count']} сообщений")
        
        print(f"\n✅ Откройте файл: {OUTPUT_FILE}")
        
    finally:
        await client.disconnect()

if __name__ == '__main__':
    print("\n⚠️  ПРИ ПЕРВОМ ЗАПУСКЕ:")
    print("   1. Введите номер телефона (например: +79991234567)")
    print("   2. Введите код из Telegram")
    print("\n   После этого сессия сохранится и больше не потребуется.\n")
    
    loop = asyncio.get_event_loop()
    loop.run_until_complete(main())

