#!/usr/bin/env python3
# -*- coding: utf-8 -*-

"""
🚀 SISTEMA DE MONITORAMENTO DE BITCOIN - MVP (Dia 1)
====================================================

📌 O que este script faz:
- Monitora tendências de Bitcoin em tempo real
- Detecta padrões de mercado (crash, surge, price)
- Gera relatórios visuais em HTML
- Funciona 100% offline (dados simulados para demo)
- Pronto para integração com APIs reais

📌 Como usar:
    python3 bitcoin_monitor.py

📌 Como expandir:
- Integrar com Google Alerts API
- Conectar com Telegram Bot
- Adicionar visualização 3D com Three.js
- Integrar com N8n para automação
- Conectar com LM Studio para análise com IA

🎯 Objetivo: "O que você não vê, eu vejo. O que você não ouve, eu escuto."

Criado com energia, clareza e propósito.
"""

import json
import random
from datetime import datetime
from pathlib import Path


# ========================================
# 🔧 CONFIGURAÇÃO DO SISTEMA
# ========================================

# Palavras-chave monitoradas
KEYWORDS = [
    {"term": "Bitcoin crash", "emoji": "📉"},
    {"term": "BTC price", "emoji": "💰"},
    {"term": "Bitcoin surge", "emoji": "🚀"}
]

# Arquivo de saída
OUTPUT_FILE = "report.html"

# Arquivo de histórico (para detectar tendências)
HISTORY_FILE = "bitcoin_history.json"


# ========================================
# 📊 FUNÇÕES PRINCIPAIS
# ========================================

def get_search_volume(keyword):
    """
    🔍 Simula volume de buscas para uma palavra-chave

    Em produção, esta função será substituída por:
    - Google Trends API
    - Google Alerts API
    - Ou web scraping do Google Search

    Args:
        keyword (str): Palavra-chave a ser monitorada

    Returns:
        int: Número de resultados encontrados
    """
    # Simula dados realistas (entre 30 e 200 resultados)
    base_volume = {
        "Bitcoin crash": random.randint(80, 180),
        "BTC price": random.randint(50, 150),
        "Bitcoin surge": random.randint(30, 120)
    }

    return base_volume.get(keyword, random.randint(50, 150))


def load_history():
    """
    📂 Carrega histórico de monitoramentos anteriores

    Returns:
        dict: Histórico de volumes anteriores
    """
    if not Path(HISTORY_FILE).exists():
        return {}

    try:
        with open(HISTORY_FILE, 'r', encoding='utf-8') as f:
            return json.load(f)
    except:
        return {}


def save_history(data):
    """
    💾 Salva histórico para análise de tendências

    Args:
        data (dict): Dados atuais de monitoramento
    """
    with open(HISTORY_FILE, 'w', encoding='utf-8') as f:
        json.dump(data, f, indent=2, ensure_ascii=False)


def calculate_trend(current, previous):
    """
    📈 Calcula tendência (crescimento ou queda)

    Args:
        current (int): Valor atual
        previous (int): Valor anterior

    Returns:
        tuple: (percentual, direção, emoji)
    """
    if previous == 0:
        return (0, "→", "➡️")

    change = ((current - previous) / previous) * 100

    if change > 5:
        return (change, "↑", "📈")
    elif change < -5:
        return (change, "↓", "📉")
    else:
        return (change, "→", "➡️")


def get_action_phrase():
    """
    💬 Retorna frase de ação inspiradora

    Returns:
        str: Frase motivacional do sistema
    """
    phrases = [
        "O que você não vê, eu vejo. O que você não ouve, eu escuto.",
        "O mercado fala. Eu escuto. Você age.",
        "Padrões invisíveis. Decisões visíveis.",
        "A informação é poder. A ação é resultado.",
        "Enquanto o mundo dorme, o sistema monitora.",
        "Dados em tempo real. Decisões em tempo certo."
    ]

    return random.choice(phrases)


def generate_report(results):
    """
    📄 Gera relatório em HTML com design moderno

    Args:
        results (list): Lista de resultados do monitoramento
    """
    now = datetime.now()
    timestamp = now.strftime("%d/%m/%Y às %H:%M:%S")

    # Template HTML com design moderno e responsivo
    html_template = f"""<!DOCTYPE html>
<html lang="pt-BR">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <title>📊 Relatório Bitcoin - {now.strftime("%d/%m/%Y")}</title>
    <style>
        * {{
            margin: 0;
            padding: 0;
            box-sizing: border-box;
        }}

        body {{
            font-family: -apple-system, BlinkMacSystemFont, 'Segoe UI', Roboto, sans-serif;
            background: linear-gradient(135deg, #667eea 0%, #764ba2 100%);
            min-height: 100vh;
            padding: 20px;
            color: #ffffff;
        }}

        .container {{
            max-width: 900px;
            margin: 0 auto;
            background: rgba(255, 255, 255, 0.1);
            backdrop-filter: blur(10px);
            border-radius: 20px;
            padding: 40px;
            box-shadow: 0 8px 32px rgba(0, 0, 0, 0.2);
        }}

        h1 {{
            font-size: 2.5em;
            margin-bottom: 10px;
            text-align: center;
            text-shadow: 2px 2px 4px rgba(0, 0, 0, 0.3);
        }}

        .timestamp {{
            text-align: center;
            font-size: 1.1em;
            opacity: 0.9;
            margin-bottom: 40px;
        }}

        .metrics {{
            display: grid;
            gap: 20px;
            margin-bottom: 40px;
        }}

        .metric-card {{
            background: rgba(255, 255, 255, 0.15);
            padding: 25px;
            border-radius: 15px;
            border-left: 5px solid;
            transition: transform 0.3s ease, box-shadow 0.3s ease;
        }}

        .metric-card:hover {{
            transform: translateY(-5px);
            box-shadow: 0 12px 24px rgba(0, 0, 0, 0.3);
        }}

        .metric-card.up {{
            border-color: #10b981;
        }}

        .metric-card.down {{
            border-color: #ef4444;
        }}

        .metric-card.stable {{
            border-color: #fbbf24;
        }}

        .metric-header {{
            display: flex;
            justify-content: space-between;
            align-items: center;
            margin-bottom: 15px;
        }}

        .metric-title {{
            font-size: 1.3em;
            font-weight: 600;
        }}

        .metric-emoji {{
            font-size: 2em;
        }}

        .metric-volume {{
            font-size: 2.5em;
            font-weight: bold;
            margin-bottom: 10px;
        }}

        .metric-trend {{
            font-size: 1.1em;
            display: flex;
            align-items: center;
            gap: 10px;
        }}

        .trend-badge {{
            padding: 5px 12px;
            border-radius: 20px;
            font-weight: 600;
        }}

        .trend-badge.up {{
            background: rgba(16, 185, 129, 0.3);
        }}

        .trend-badge.down {{
            background: rgba(239, 68, 68, 0.3);
        }}

        .trend-badge.stable {{
            background: rgba(251, 191, 36, 0.3);
        }}

        .action-quote {{
            background: rgba(0, 0, 0, 0.3);
            padding: 30px;
            border-radius: 15px;
            text-align: center;
            font-size: 1.3em;
            font-style: italic;
            line-height: 1.6;
            border: 2px solid rgba(255, 255, 255, 0.2);
        }}

        .footer {{
            margin-top: 40px;
            text-align: center;
            opacity: 0.8;
            font-size: 0.9em;
        }}

        @media (max-width: 768px) {{
            .container {{
                padding: 20px;
            }}

            h1 {{
                font-size: 1.8em;
            }}

            .metric-volume {{
                font-size: 2em;
            }}
        }}
    </style>
</head>
<body>
    <div class="container">
        <h1>📊 Relatório de Monitoramento - Bitcoin</h1>
        <div class="timestamp">📅 {timestamp}</div>

        <div class="metrics">
"""

    # Adiciona cada métrica ao relatório
    for result in results:
        trend_class = result['trend_class']
        html_template += f"""
            <div class="metric-card {trend_class}">
                <div class="metric-header">
                    <span class="metric-title">{result['emoji']} {result['keyword']}</span>
                    <span class="metric-emoji">{result['trend_emoji']}</span>
                </div>
                <div class="metric-volume">{result['volume']} resultados</div>
                <div class="metric-trend">
                    <span class="trend-badge {trend_class}">
                        {result['trend_arrow']} {abs(result['trend_percent']):.1f}%
                    </span>
                    <span>{result['trend_text']}</span>
                </div>
            </div>
"""

    # Finaliza o HTML
    html_template += f"""
        </div>

        <div class="action-quote">
            💬 "{get_action_phrase()}"
        </div>

        <div class="footer">
            🚀 Sistema de Monitoramento Bitcoin v1.0<br>
            Criado com energia, clareza e propósito<br>
            <a href="https://github.com" style="color: #fff; opacity: 0.8;">GitHub</a> |
            <a href="https://twitter.com" style="color: #fff; opacity: 0.8;">Twitter</a>
        </div>
    </div>
</body>
</html>
"""

    # Salva o arquivo HTML
    with open(OUTPUT_FILE, 'w', encoding='utf-8') as f:
        f.write(html_template)

    print(f"✅ Relatório gerado com sucesso: {OUTPUT_FILE}")


# ========================================
# 🎯 FUNÇÃO PRINCIPAL
# ========================================

def main():
    """
    🚀 Função principal do sistema

    Executa o monitoramento completo:
    1. Carrega histórico anterior
    2. Coleta dados atuais
    3. Calcula tendências
    4. Gera relatório HTML
    5. Salva histórico
    """
    print("\n" + "="*50)
    print("🚀 SISTEMA DE MONITORAMENTO DE BITCOIN")
    print("="*50 + "\n")

    # Carrega histórico anterior
    history = load_history()
    print("📂 Carregando histórico anterior...")

    # Coleta dados atuais
    print("🔍 Monitorando palavras-chave...\n")

    current_data = {}
    results = []

    for keyword_data in KEYWORDS:
        keyword = keyword_data['term']
        emoji = keyword_data['emoji']

        # Obtém volume atual
        volume = get_search_volume(keyword)
        current_data[keyword] = volume

        # Obtém volume anterior (se existir)
        previous_volume = history.get(keyword, volume)

        # Calcula tendência
        trend_percent, trend_arrow, trend_emoji = calculate_trend(volume, previous_volume)

        # Define classe CSS baseada na tendência
        if trend_arrow == "↑":
            trend_class = "up"
            trend_text = "em alta"
        elif trend_arrow == "↓":
            trend_class = "down"
            trend_text = "em queda"
        else:
            trend_class = "stable"
            trend_text = "estável"

        # Adiciona resultado
        results.append({
            'keyword': keyword,
            'emoji': emoji,
            'volume': volume,
            'trend_percent': trend_percent,
            'trend_arrow': trend_arrow,
            'trend_emoji': trend_emoji,
            'trend_class': trend_class,
            'trend_text': trend_text
        })

        # Exibe no console
        print(f"  {emoji} {keyword}: {volume} resultados {trend_arrow} ({trend_percent:+.1f}%)")

    print("\n📊 Gerando relatório HTML...")

    # Gera relatório
    generate_report(results)

    # Salva histórico
    save_history(current_data)
    print("💾 Histórico atualizado\n")

    print("="*50)
    print("✅ Monitoramento concluído com sucesso!")
    print(f"📄 Abra o arquivo '{OUTPUT_FILE}' no navegador")
    print("="*50 + "\n")

    print("💡 Próximos passos:")
    print("  1. Automatizar com cron/Task Scheduler (a cada 24h)")
    print("  2. Integrar com API real do Google")
    print("  3. Conectar com Telegram Bot")
    print("  4. Adicionar visualização 3D com Three.js")
    print("  5. Integrar com LM Studio para análise com IA\n")


# ========================================
# 🏁 EXECUÇÃO
# ========================================

if __name__ == "__main__":
    try:
        main()
    except KeyboardInterrupt:
        print("\n\n⚠️ Execução interrompida pelo usuário")
    except Exception as e:
        print(f"\n❌ Erro: {e}")
        import traceback
        traceback.print_exc()
