#!/usr/bin/env python3
# -*- coding: utf-8 -*-
"""
Интеграция аналитики в Telegram бота
Добавьте эти функции в ваш telegram_bot.py
"""

from analytics import BotAnalytics
from telebot.types import Message
import logging

logger = logging.getLogger(__name__)


def get_user_personal_stats(user_id: int) -> str:
    """Получить персональную статистику пользователя"""
    try:
        analytics = BotAnalytics()
        session = analytics.get_session()
        
        from database import FoodRecord
        from sqlalchemy import func
        from datetime import datetime, timedelta
        
        # Общая статистика пользователя
        total_records = session.query(func.count(FoodRecord.id)).filter(
            FoodRecord.user_id == user_id
        ).scalar()
        
        if total_records == 0:
            return "📊 У вас пока нет записей. Начните добавлять информацию о еде!"
        
        total_calories = session.query(func.sum(FoodRecord.calories)).filter(
            FoodRecord.user_id == user_id
        ).scalar() or 0
        
        # Статистика за сегодня
        today_start = datetime.utcnow().replace(hour=0, minute=0, second=0, microsecond=0)
        today_records = session.query(func.count(FoodRecord.id)).filter(
            FoodRecord.user_id == user_id,
            FoodRecord.created_at >= today_start
        ).scalar()
        
        today_calories = session.query(func.sum(FoodRecord.calories)).filter(
            FoodRecord.user_id == user_id,
            FoodRecord.created_at >= today_start
        ).scalar() or 0
        
        # Статистика за неделю
        week_start = datetime.utcnow() - timedelta(days=7)
        week_records = session.query(func.count(FoodRecord.id)).filter(
            FoodRecord.user_id == user_id,
            FoodRecord.created_at >= week_start
        ).scalar()
        
        week_calories = session.query(func.sum(FoodRecord.calories)).filter(
            FoodRecord.user_id == user_id,
            FoodRecord.created_at >= week_start
        ).scalar() or 0
        
        # Средние значения
        avg_calories = total_calories / total_records if total_records > 0 else 0
        
        # Топ продуктов пользователя
        top_foods = session.query(
            FoodRecord.food_name,
            func.count(FoodRecord.id).label('count')
        ).filter(
            FoodRecord.user_id == user_id
        ).group_by(FoodRecord.food_name).order_by(
            func.count(FoodRecord.id).desc()
        ).limit(5).all()
        
        # Первая и последняя записи
        first_record = session.query(FoodRecord).filter(
            FoodRecord.user_id == user_id
        ).order_by(FoodRecord.created_at.asc()).first()
        
        days_using = (datetime.utcnow() - first_record.created_at).days + 1
        
        session.close()
        
        # Формируем сообщение
        text = f"""📊 *Ваша персональная статистика*

📅 *За всё время (дней: {days_using})*
├ 📝 Записей: {total_records}
├ 🔥 Калорий: {total_calories:,.0f} ккал
└ 📊 Среднее: {avg_calories:.0f} ккал/запись

📅 *За сегодня*
├ 📝 Записей: {today_records}
└ 🔥 Калорий: {today_calories:,.0f} ккал

📅 *За неделю*
├ 📝 Записей: {week_records}
└ 🔥 Калорий: {week_calories:,.0f} ккал

🍽️ *Ваши топ-5 продуктов:*
"""
        
        for i, food in enumerate(top_foods, 1):
            text += f"{i}. {food.food_name} - {food.count} раз\n"
        
        return text
        
    except Exception as e:
        logger.error(f"Ошибка получения статистики для пользователя {user_id}: {e}")
        return f"❌ Ошибка получения статистики: {e}"


def get_global_stats() -> str:
    """Получить глобальную статистику бота"""
    try:
        analytics = BotAnalytics()
        stats = analytics.get_general_stats()
        retention = analytics.get_user_retention()
        
        text = f"""📊 *Глобальная статистика AI-КАЛОРИЯ*

👥 *Пользователи*
├ Всего: {stats['total_users']}
├ Возвращаются: {retention['returning_users']} ({retention['returning_rate']:.1f}%)
└ Разовые: {retention['one_time_users']}

📝 *Записи*
├ Всего: {stats['total_records']}
└ На пользователя: {stats['avg_records_per_user']:.1f}

🔥 *Калории*
├ Всего: {stats['total_calories']:,.0f} ккал
└ На запись: {stats['avg_calories_per_record']:.0f} ккал

📅 *Даты*
├ Первая запись: {stats['first_record_date']}
└ Последняя: {stats['last_record_date']}
"""
        
        return text
        
    except Exception as e:
        logger.error(f"Ошибка получения глобальной статистики: {e}")
        return f"❌ Ошибка получения статистики: {e}"


# =============================================================================
# Добавьте эти обработчики в ваш telegram_bot.py
# =============================================================================

"""
@bot.message_handler(commands=['stats', 'mystats'])
def show_personal_stats(message: Message):
    '''Показать персональную статистику пользователя'''
    user_id = message.from_user.id
    stats_text = get_user_personal_stats(user_id)
    bot.reply_to(message, stats_text, parse_mode='Markdown')


@bot.message_handler(commands=['globalstats'])
def show_global_stats(message: Message):
    '''Показать глобальную статистику бота (для админов)'''
    # Добавьте проверку на админа
    ADMIN_IDS = [23916354]  # Список ID администраторов
    
    if message.from_user.id not in ADMIN_IDS:
        bot.reply_to(message, "❌ У вас нет доступа к этой команде.")
        return
    
    stats_text = get_global_stats()
    bot.reply_to(message, stats_text, parse_mode='Markdown')


@bot.message_handler(commands=['top'])
def show_top_foods(message: Message):
    '''Показать топ продуктов'''
    try:
        from analytics import BotAnalytics
        analytics = BotAnalytics()
        top_foods = analytics.get_top_foods(limit=10)
        
        text = "🏆 *Топ-10 продуктов всех пользователей*\n\n"
        
        for i, food in enumerate(top_foods, 1):
            text += f"{i}. {food['food_name']}\n"
            text += f"   📝 {food['count']} раз | 🔥 ~{food['avg_calories']:.0f} ккал\n\n"
        
        bot.reply_to(message, text, parse_mode='Markdown')
        
    except Exception as e:
        logger.error(f"Ошибка получения топ продуктов: {e}")
        bot.reply_to(message, f"❌ Ошибка: {e}")
"""

# =============================================================================
# Для использования:
# 1. Скопируйте функции get_user_personal_stats() и get_global_stats()
# 2. Скопируйте обработчики команд (убрав тройные кавычки)
# 3. Добавьте в свой telegram_bot.py
# 4. Перезапустите бота
# =============================================================================

