"""
Fossati AI Bot - Notificador Telegram
Alertas formatados de trade, status e resumo diário
"""

import logging
import requests
from ai_engine import TradeSignal, Direction
from risk_manager import RiskManager

log = logging.getLogger(__name__)

EMOJI = {
    "long":   "🟢",
    "short":  "🔴",
    "info":   "📊",
    "win":    "✅",
    "loss":   "❌",
    "alert":  "⚠️",
    "halt":   "⛔",
    "target": "🎯",
    "rocket": "🚀",
    "money":  "💰",
    "chart":  "📈",
    "down":   "📉",
}


class TelegramNotifier:
    def __init__(self, config):
        self.token   = config.TELEGRAM_BOT_TOKEN
        self.chat_id = config.TELEGRAM_CHAT_ID
        self.base    = f"https://api.telegram.org/bot{self.token}"
        self.enabled = self.token != "SEU_BOT_TOKEN_AQUI"

    def _send(self, text: str):
        if not self.enabled:
            log.debug(f"[Telegram desabilitado] {text[:60]}...")
            return
        try:
            resp = requests.post(
                f"{self.base}/sendMessage",
                json={
                    "chat_id":    self.chat_id,
                    "text":       text,
                    "parse_mode": "HTML",
                },
                timeout=10,
            )
            if not resp.ok:
                log.warning(f"Telegram erro: {resp.status_code} {resp.text}")
        except Exception as e:
            log.error(f"Erro ao enviar Telegram: {e}")

    def send_signal(self, signal: TradeSignal, sizing: dict):
        dir_emoji = EMOJI["long"] if signal.direction == Direction.BULLISH else EMOJI["short"]
        dir_label = "LONG" if signal.direction == Direction.BULLISH else "SHORT"

        confluences_text = "\n".join(f"  {c}" for c in signal.confluences[:12])

        msg = (
            f"{dir_emoji} <b>FOSSATI AI — {dir_label} {signal.symbol}</b>\n"
            f"{'─'*35}\n"
            f"📍 <b>Entrada:</b> {signal.entry:.4f}\n"
            f"🛑 <b>Stop Loss:</b> {signal.stop_loss:.4f}\n"
            f"🎯 <b>TP1 (50%):</b> {signal.take_profit:.4f}\n"
            + (f"🎯 <b>TP2 (30%):</b> {signal.take_profit_2:.4f}\n" if signal.take_profit_2 else "")
            + (f"🎯 <b>TP3 (20%):</b> {signal.take_profit_3:.4f}\n" if signal.take_profit_3 else "")
            + f"{'─'*35}\n"
            f"⚡ <b>Alavancagem:</b> {signal.leverage}x\n"
            f"💵 <b>Margem:</b> ${sizing.get('margin_required', 0):.2f} "
            f"({sizing.get('risk_pct', 0):.1f}% de risco)\n"
            f"📐 <b>R:R:</b> {signal.risk_reward:.1f}:1\n"
            f"🧠 <b>Score:</b> {signal.score}/12 "
            f"({signal.confidence*100:.0f}% confiança)\n"
            f"{'─'*35}\n"
            f"<b>Confluências:</b>\n{confluences_text}\n"
            f"{'─'*35}\n"
            f"💬 {signal.reasoning}"
        )
        self._send(msg)

    def send_trade_closed(self, symbol: str, direction: str, pnl: float,
                          entry: float, exit_price: float, reason: str = "TP/SL"):
        emoji = EMOJI["win"] if pnl > 0 else EMOJI["loss"]
        dir_label = "LONG" if direction == "bullish" else "SHORT"
        msg = (
            f"{emoji} <b>TRADE FECHADO — {symbol}</b>\n"
            f"{'─'*35}\n"
            f"📌 {dir_label} | Motivo: {reason}\n"
            f"📍 Entrada: {entry:.4f}\n"
            f"📍 Saída: {exit_price:.4f}\n"
            f"{'─'*35}\n"
            f"{'💰' if pnl > 0 else '📉'} <b>P&L: {'+'if pnl>0 else ''}{pnl:.2f} USDT</b>"
        )
        self._send(msg)

    def send_daily_summary(self, risk_manager: RiskManager):
        msg = f"{EMOJI['chart']} <b>RESUMO DIÁRIO — FOSSATI AI BOT</b>\n{'─'*35}\n"
        msg += risk_manager.get_summary()
        self._send(msg)

    def send_target_reached(self, balance: float, pnl: float, pct: float):
        msg = (
            f"{EMOJI['target']} <b>META DIÁRIA ATINGIDA!</b>\n"
            f"{'─'*35}\n"
            f"💰 Saldo atual: ${balance:.2f}\n"
            f"📈 Lucro do dia: +${pnl:.2f} (+{pct:.1f}%)\n"
            f"⛔ Novas entradas pausadas até amanhã.\n"
            f"🤖 Fossati AI Bot"
        )
        self._send(msg)

    def send_halt_alert(self, reason: str, balance: float):
        msg = (
            f"{EMOJI['halt']} <b>TRADING PAUSADO</b>\n"
            f"{'─'*35}\n"
            f"⚠️ Motivo: {reason}\n"
            f"💰 Saldo atual: ${balance:.2f}\n"
            f"🤖 Fossati AI Bot"
        )
        self._send(msg)

    def send_startup(self, balance: float, daily_target: float, symbols: list):
        sym_text = ", ".join(symbols[:7]) + (f" +{len(symbols)-7}" if len(symbols) > 7 else "")
        msg = (
            f"{EMOJI['rocket']} <b>FOSSATI AI BOT INICIADO</b>\n"
            f"{'─'*35}\n"
            f"💰 Saldo: ${balance:.2f}\n"
            f"🎯 Meta diária: +${daily_target:.2f} ({daily_target/balance*100:.0f}%)\n"
            f"📊 Tokens: {sym_text}\n"
            f"⚡ Método: SMC PRO Elite + IA\n"
            f"🤖 Fossati AI Bot — Ativo"
        )
        self._send(msg)

    def send_error(self, error: str):
        self._send(f"{EMOJI['alert']} <b>ERRO:</b> {error[:200]}")
