"""
Форматирование сообщений
"""
import json
from typing import List, Dict, Any
from database.models import User


def format_phone_list(services: List[Dict[str, Any]]) -> str:
    """Форматировать список телефонов"""
    if not services:
        return '📭 Список пуст'
    
    lines = []
    for svc in services:
        emoji = get_service_emoji(svc.get('category', ''))
        name = svc.get('name', 'Неизвестно')
        phone = svc.get('phone', '')
        desc = svc.get('description', '')
        rating = svc.get('rating')
        
        line = f'{emoji} <b>{name}</b>: <code>{phone}</code>'
        if desc:
            line += f'\n   └─ {desc}'
        if rating:
            line += f' ⭐ {rating}'
        
        lines.append(line)
    
    return '\n\n'.join(lines)


def get_service_emoji(category: str) -> str:
    """Эмодзи для категории службы"""
    emojis = {
        'emergency': '🚨',
        'utility': '🔧',
        'police': '👮',
        'masters': '👷',
        'plumber': '🚿',
        'electrician': '⚡',
    }
    return emojis.get(category, '📞')


def format_user_info(user: User) -> str:
    """Форматировать информацию о пользователе"""
    status = '✅' if user.verified else '⏳'
    spy_status = get_spy_status(user.spy_score)
    
    text = f'''{status} <b>{user.full_name}</b>
├─ ID: <code>{user.user_id}</code>
├─ Ник: @{user.username or 'нет'}
├─ Квартира: {user.apartment or 'не указана'}
├─ Сообщений: {user.message_count}
├─ В чате с: {user.join_date.strftime('%d.%m.%Y')}
└─ Статус: {spy_status}'''
    
    return text


def get_spy_status(score: int) -> str:
    """Статус детекта шпиона"""
    if score <= 30:
        return '🟢 В норме'
    elif score <= 60:
        return '🟡 Подозрительно'
    else:
        return '🔴 ШПИОН!'


def format_stats(stats: Dict[str, Any]) -> str:
    """Форматировать статистику чата"""
    text = f'''📊 <b>Статистика чата</b>

👥 <b>Пользователи:</b>
├─ Всего: {stats.get('total_users', 0)}
├─ Верифицированы: {stats.get('verified_users', 0)}
└─ Непроверены: {stats.get('unverified_users', 0)}

📝 <b>Сообщения:</b>
├─ Всего: {stats.get('total_messages', 0)}
├─ За неделю: {stats.get('messages_week', 0)}
└─ За день: {stats.get('messages_day', 0)}

🕵️ <b>Безопасность:</b>
├─ Подозрительных: {stats.get('suspicious_count', 0)}
└─ Шпионов: {stats.get('spies_count', 0)}

📈 <b>Активность:</b>
└─ Топ за неделю: {stats.get('top_users', 'нет данных')}'''
    
    return text


def format_spy_alert(user: User, flags: List[str]) -> str:
    """Форматировать предупреждение о шпионе"""
    flag_emojis = {
        'new_account': '🆕',
        'no_avatar': '👤',
        'generic_username': '🔤',
        'unverified': '⏳',
        'provocation': '💬',
        'office_hours': '🕐',
        'multicount': '🔄',
        'complaints': '⚠️'
    }
    
    flags_text = '\n'.join([f'{flag_emojis.get(f, "•")} {f}' for f in flags])
    
    return f'''🚨 <b>ТРЕВОГА: Возможный шпион!</b>

{format_user_info(user)}

📋 <b>Флаги:</b>
{flags_text}

💡 <b>Рекомендация:</b> Проверить и запросить верификацию'''
