"""Componentes de UI com suporte a tema escuro.""" from typing import Dict, Any from config.config import AppConfig from src.ui.theme_manager import theme_manager from src.utils.utils import ( NumberUtils, ConfidenceUtils, ActionUtils, SentimentUtils, FormatUtils ) class DarkThemeUIComponents: """Componentes da interface com suporte a tema escuro.""" @staticmethod def create_header() -> str: """Cria o cabeçalho da aplicação com tema escuro.""" theme = theme_manager.get_current_theme() colors = theme['colors'] return f"""

📈 {AppConfig.APP_TITLE}

{AppConfig.APP_DESCRIPTION}

🌙 Tema Escuro Ativo
""" @staticmethod def format_harmonic_patterns(analysis_result: Dict[str, Any]) -> str: """Formata padrões harmônicos com tema escuro.""" theme = theme_manager.get_current_theme() colors = theme['colors'] harmonic_patterns = analysis_result.get('harmonic_patterns', []) if not harmonic_patterns: return f"""

🎵 Padrões Harmônicos

📊

Nenhum padrão harmônico detectado

""" patterns_html = "" for pattern in harmonic_patterns: pattern_name = pattern.get('name', 'Desconhecido') confidence = pattern.get('confidence', 0) direction = pattern.get('direction', 'NEUTRO') direction_emoji = "📈" if direction == "ALTA" else "📉" if direction == "BAIXA" else "➡️" direction_color = colors['success'] if direction == "ALTA" else colors['error'] if direction == "BAIXA" else colors['warning'] patterns_html += f"""
{direction_emoji} {pattern_name}
Direção: {direction}
{confidence}%
Confiança
""" return f"""

🎵 Padrões Harmônicos Detectados

{patterns_html}
""" @staticmethod def format_fibonacci_alerts(analysis_result: Dict[str, Any]) -> str: """Formata alertas de Fibonacci com tema escuro.""" theme = theme_manager.get_current_theme() colors = theme['colors'] fibonacci_data = analysis_result.get('fibonacci_analysis', {}) levels = fibonacci_data.get('levels', []) if not levels: return f"""

📐 Níveis de Fibonacci

📊

Nenhum nível de Fibonacci calculado

""" levels_html = "" for level in levels: level_value = level.get('level', 0) price = level.get('price', 0) status = level.get('status', 'NEUTRO') status_color = colors['success'] if status == 'SUPORTE' else colors['error'] if status == 'RESISTÊNCIA' else colors['text_secondary'] levels_html += f"""
{level_value}% {NumberUtils.format_price(price)} {status}
""" return f"""

📐 Níveis de Fibonacci

{levels_html}
""" @staticmethod def format_main_result(analysis_result: Dict[str, Any]) -> str: """Formata resultado principal com tema escuro.""" theme = theme_manager.get_current_theme() colors = theme['colors'] action = analysis_result.get('action', 'AGUARDAR') confidence = analysis_result.get('confidence', 0) market_data = analysis_result.get('market_data', {}) price = market_data.get('price', 0) variation = market_data.get('variation', 0) # Formatação de preço e variação formatted_price = NumberUtils.format_price(price) formatted_variation = f"{variation:+.2f}%" if variation != 0 else "0.00%" variation_color = colors['success'] if variation > 0 else colors['error'] if variation < 0 else colors['text_secondary'] # Nível de confiança confidence_level = ConfidenceUtils.get_confidence_level(confidence) confidence_bar = ConfidenceUtils.get_confidence_bar(confidence) # Emojis e cores para ação action_emojis = { 'COMPRAR': {'emoji': '🟢', 'color': colors['success'], 'action': 'COMPRAR'}, 'VENDER': {'emoji': '🔴', 'color': colors['error'], 'action': 'VENDER'}, 'AGUARDAR': {'emoji': '🟡', 'color': colors['warning'], 'action': 'AGUARDAR'} } action_info = action_emojis.get(action, action_emojis['AGUARDAR']) return f"""
{action_info['emoji']}

{action_info['action']}

PREÇO ATUAL
{formatted_price}
{formatted_variation}
CONFIANÇA
{confidence}%
{confidence_level}
NÍVEL DE CONFIANÇA
{confidence_bar}
""" @staticmethod def format_sentiment_analysis(analysis_result: Dict[str, Any]) -> str: """Formata análise de sentimento com tema escuro.""" theme = theme_manager.get_current_theme() colors = theme['colors'] sentiment_data = analysis_result.get('sentiment_analysis', {}) label = sentiment_data.get('label', 'NEUTRO') confidence = sentiment_data.get('confidence', 0) # Configurações de sentimento sentiment_config = SentimentUtils.get_sentiment_config(label) emoji = sentiment_config['emoji'] color = colors['success'] if label == 'POSITIVO' else colors['error'] if label == 'NEGATIVO' else colors['warning'] return f"""

🧠 Análise de Sentimento

{emoji}

{label}

Confiança: {confidence:.1f}%
📝 Detalhes da Análise

O modelo de IA analisou o contexto do mercado e determinou um sentimento {label.lower()} com {confidence:.1f}% de confiança.

""" @staticmethod def format_recommendations(analysis_result: Dict[str, Any]) -> str: """Formata recomendações com tema escuro.""" theme = theme_manager.get_current_theme() colors = theme['colors'] action = analysis_result.get('action', 'AGUARDAR') market_data = analysis_result.get('market_data', {}) price = market_data.get('price', 0) # Recomendações de trading trading_recs = FormatUtils.format_trading_recommendations(action, price) # Direção de trading direction = ActionUtils.get_trading_direction(action) direction_emoji = "📈" if direction == "COMPRA" else "📉" if direction == "VENDA" else "⏸️" direction_color = colors['success'] if direction == "COMPRA" else colors['error'] if direction == "VENDA" else colors['warning'] return f"""

💡 Recomendações de Trading

{direction_emoji} Direção: {direction}
{trading_recs}
⚠️ Aviso Importante

Esta análise é apenas para fins educacionais. Sempre faça sua própria pesquisa e considere consultar um consultor financeiro antes de tomar decisões de investimento.

""" @staticmethod def _get_ai_status_html(available: bool, model_description: str = "") -> str: """Gera HTML para status da IA com tema escuro.""" theme = theme_manager.get_current_theme() colors = theme['colors'] if available: return f"""
🤖
IA Ativa: {model_description}
""" else: return f"""
⚠️
IA Indisponível: Executando apenas análise técnica
""" @staticmethod def create_footer(model_info: Dict[str, Any]) -> str: """Cria rodapé com tema escuro.""" theme = theme_manager.get_current_theme() colors = theme['colors'] return f"""

🤖 Powered by FinBERT AI | 🌙 Tema Escuro | 📊 Análise Financeira Avançada

"""