"""
Telegram 消息模板

信号推送格式严格按照项目计划书中的示例格式
"""


def format_long_signal(signal: dict) -> str:
    """
    格式化做多信号推送

    示例输出:
    🟢 做多信号
    币种: BTC/USDT
    类型: 日线+4H共振
    入场: $68,500 (1H回踩盒顶)
    止损: $68,294 (盒顶-0.3%)
    止损距离: 0.3%
    建议仓位: 25% (10x杠杆)
    名义持仓: $171,250
    BTC 60日趋势: +22%
    跨币共振: ETH同期有日线突破 ✅
    """
    coin_display = signal['coin'].replace('USDT', '/USDT')
    entry_method_display = signal.get('entry_method', '4H直接')
    if entry_method_display == '1H回踩':
        entry_note = '1H回踩盒顶'
    else:
        entry_note = '4H直接入场'

    msg = f"""🟢 做多信号
━━━━━━━━━━━━━━━━
币种: {coin_display}
类型: {signal['signal_type']}
入场: ${signal['entry_price']:,.2f} ({entry_note})
止损: ${signal['stop_loss']:,.2f} (盒顶-0.3%)
止损距离: {signal['sl_distance']:.1%}
建议仓位: {signal.get('position_pct', 0):.0%} ({signal.get('leverage', 10)}x杠杆)
名义持仓: ${signal.get('notional', 0):,.0f}
━━━━━━━━━━━━━━━━
盒子: ${signal.get('box_low', 0):,.2f} ~ ${signal.get('box_high', 0):,.2f} (宽度{signal.get('box_width_pct', 0):.1%})
量比: {signal.get('volume_ratio', 0):.1f}x
BTC 60日趋势: {signal.get('btc_trend_60d', 0):+.1%}
本币 60日趋势: {signal.get('coin_trend_60d', 0):+.1%}"""

    if signal.get('cross_resonance'):
        msg += "\n跨币共振: BTC近期有日线突破 ✅"

    return msg


def format_short_signal(signal: dict) -> str:
    """格式化做空信号推送"""
    coin_display = signal['coin'].replace('USDT', '/USDT')

    msg = f"""🔴 做空信号
━━━━━━━━━━━━━━━━
币种: {coin_display}
类型: c浪做空
入场: ${signal['entry_price']:,.2f} (4H跌破支撑)
止损: ${signal['stop_loss']:,.2f} (入场K线高点+0.5%)
止损距离: {signal['sl_distance']:.1%}
建议仓位: {signal.get('position_pct', 0):.0%} ({signal.get('leverage', 5)}x杠杆)
名义持仓: ${signal.get('notional', 0):,.0f}
━━━━━━━━━━━━━━━━
BTC 60日趋势: {signal.get('btc_trend_60d', 0):+.1%}
本币 60日趋势: {signal.get('coin_trend_60d', 0):+.1%}"""

    return msg


def format_signal(signal: dict) -> str:
    """根据方向自动选择模板"""
    if signal.get('direction') == 'short':
        return format_short_signal(signal)
    return format_long_signal(signal)


def format_daily_report(stats: dict) -> str:
    """每日日报"""
    msg = f"""📊 每日报告 — {stats.get('date', 'today')}
━━━━━━━━━━━━━━━━
账户余额: ${stats.get('balance', 0):,.2f}
今日盈亏: ${stats.get('daily_pnl', 0):+,.2f} ({stats.get('daily_pnl_pct', 0):+.1%})
活跃持仓: {stats.get('active_positions', 0)}个
今日信号: {stats.get('signals_today', 0)}个
━━━━━━━━━━━━━━━━
累计收益: ${stats.get('total_pnl', 0):+,.2f}
最大回撤: {stats.get('max_dd', 0):.1f}%
连败计数: {stats.get('consecutive_losses', 0)}笔
4H暂停: {'是' if stats.get('paused_4h') else '否'}"""

    return msg


def format_status_update(coins_status: list) -> str:
    """币种状态概览"""
    lines = ["📋 币种状态概览", "━━━━━━━━━━━━━━━━"]

    for cs in coins_status:
        trend_emoji = '📈' if cs.get('trend_60d', 0) > 0 else '📉'
        box_status = '📦 有活跃盒子' if cs.get('has_active_box') else ''

        lines.append(
            f"{cs['coin'].replace('USDT', ''):<6} "
            f"${cs.get('price', 0):>10,.2f} "
            f"{trend_emoji}{cs.get('trend_60d', 0):>+6.1%} "
            f"{box_status}"
        )

    return '\n'.join(lines)


def format_error_alert(error_msg: str, component: str = '') -> str:
    """错误告警"""
    return f"""⚠️ 系统告警
━━━━━━━━━━━━━━━━
组件: {component}
错误: {error_msg}
时间: {{now}}
━━━━━━━━━━━━━━━━
请检查系统状态"""


def format_heartbeat() -> str:
    """心跳消息"""
    return "💓 浪浪AI 系统正常运行"
