"""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}
"""
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
"""