#!/usr/bin/env python3
"""
Script para testar as estatísticas e identificar problemas
"""

from src import create_app, db
from src.models import User, Chat, Message, Agente
from src.services.stats_service import StatsService
from datetime import datetime, timedelta
import random

def test_stats():
    app = create_app()
    
    with app.app_context():
        try:
            user = User.query.filter_by(username='test_stats').first()
            if not user:
                user = User(username='test_stats', role='operator')
                user.set_password('test123')
                db.session.add(user)
                db.session.commit()
                print("Usuário de teste criado")
            
            agentes = []
            for i in range(3):
                agente = Agente.query.filter_by(nome=f'Agente Teste {i+1}', user_id=user.id).first()
                if not agente:
                    agente = Agente(
                        nome=f'Agente Teste {i+1}',
                        descricao=f'Descrição do agente {i+1}',
                        user_id=user.id,
                        model_identifier=f'model-{i+1}'
                    )
                    db.session.add(agente)
                    db.session.commit()
                    print(f"Agente {i+1} criado")
                agentes.append(agente)
            
            for i in range(5):
                chat = Chat(
                    user_id=user.id,
                    agent_id=random.choice(agentes).id,
                    title=f'Chat Teste {i+1}',
                    created_at=datetime.now() - timedelta(days=random.randint(0, 10))
                )
                db.session.add(chat)
                db.session.commit()
                
                for j in range(random.randint(2, 8)):
                    is_user = j % 2 == 0
                    message = Message(
                        chat_id=chat.id,
                        message=f'Mensagem {j+1} do chat {i+1}',
                        is_user=is_user,
                        created_at=chat.created_at + timedelta(minutes=j*5),
                        response_time=random.uniform(0.5, 3.0) if not is_user else None,
                        tokens=random.randint(10, 100) if not is_user else None
                    )
                    db.session.add(message)
                
                db.session.commit()
                print(f"Chat {i+1} e mensagens criados")
            
            print("\n=== Testando StatsService ===")
            
            from flask_login import current_user
            import flask_login
            
            class MockUser:
                def __init__(self, user_id):
                    self.id = user_id
                    self.is_authenticated = True
                    self.is_active = True
                    self.is_anonymous = False
                
                def get_id(self):
                    return str(self.id)
            
            original_current_user = flask_login.current_user
            flask_login.current_user = MockUser(user.id)
            
            try:
                stats_data, error = StatsService.get_dashboard_stats(period_days=7)
                
                if error:
                    print(f"Erro ao buscar estatísticas: {error}")
                else:
                    print("Estatísticas obtidas com sucesso:")
                    print(f"- Total de conversas: {stats_data['total_conversations']}")
                    print(f"- Total de mensagens: {stats_data['total_messages']}")
                    print(f"- Tempo médio de resposta: {stats_data['avg_response_time']}s")
                    print(f"- Total de tokens: {stats_data['total_tokens']}")
                    print(f"- Uso por modelo: {stats_data['model_usage']}")
                    print(f"- Dados de atividade: {stats_data['activity_data']}")
                
                print("\n=== Testando diferentes períodos ===")
                for period in [1, 7, 30]:
                    stats_data, error = StatsService.get_dashboard_stats(period_days=period)
                    if not error:
                        print(f"Período {period} dias: {stats_data['total_conversations']} conversas")
                    else:
                        print(f"Erro no período {period} dias: {error}")
                        
            finally:
                flask_login.current_user = original_current_user
                    
        except Exception as e:
            print(f"Erro durante o teste: {str(e)}")
            import traceback
            traceback.print_exc()

if __name__ == '__main__':
    test_stats() 