#!/usr/bin/env python3
"""Diagnostica VPTR3 - solo prima pagina 200 trade (la pagination rompe la firma)."""
import sys, os
from datetime import datetime
sys.path.insert(0, '/opt/charter-live/live_deploy_v2')
os.chdir('/opt/charter-live/live_deploy_v2')
from bybit_demo_client import BybitDemoClient

c = BybitDemoClient()

# Query 1: closed-pnl con limit 200 (no cursor per evitare err firma)
r1 = c._request('GET', '/v5/position/closed-pnl', {'category': 'linear', 'settleCoin': 'USDT', 'limit': '200'}, signed=True)
trades = r1.get('result', {}).get('list', [])

print(f"=== BYBIT CLOSED-PNL 2° account (max 200) ===")
print(f"Trade totali ricevuti: {len(trades)}")
if trades:
    min_ts = min(int(t.get('updatedTime', 0)) for t in trades)
    max_ts = max(int(t.get('updatedTime', 0)) for t in trades)
    print(f"Range date: {datetime.fromtimestamp(min_ts/1000).strftime('%Y-%m-%d')} -> {datetime.fromtimestamp(max_ts/1000).strftime('%Y-%m-%d')}")
print()

# Strategie di Mattia
VPTR3_ENABLED = {'BTCUSDT', 'AXSUSDT', 'SIRENUSDT', 'ZECUSDT'}  # ZEC abilitato 3h in CSV
VPTR3_DISABLED = {'VIRTUALUSDT', 'AEROUSDT', 'SOLUSDT', 'DASHUSDT'}  # erano enabled, ora no
RSI_SWING = {'WIFUSDT', 'AEOUSDT'}
SQW = {'NEARUSDT', '1000BONKUSDT', 'ZECUSDT'}  # ZEC SQW per Mattia
RETTANGOLO_SIMPLE = {'ARUSDT'}
RETTANGOLO_ENABLED = {'UNIUSDT', 'WIFUSDT'}  # WIF anche qui
RETTANGOLO_DISABLED = {'RENDERUSDT', 'SOLUSDT', 'BTCUSDT', 'ETHUSDT', 'ZECUSDT'}
MA_TRAILING_ENABLED = {'NEARUSDT', 'BEATUSDT'}

# Per simbolo: count, PnL totale
by_sym = {}
for tr in trades:
    s = tr['symbol']
    pnl = float(tr.get('closedPnl', 0))
    if s not in by_sym:
        by_sym[s] = {'n': 0, 'pnl': 0, 'trades': []}
    by_sym[s]['n'] += 1
    by_sym[s]['pnl'] += pnl
    by_sym[s]['trades'].append(tr)

print(f"=== TUTTI I TRADE per simbolo (PnL 2° account) ===")
print(f"{'symbol':14s} {'n':>4s} {'pnl':>10s}  strategia (CSV)")
total_pnl = 0
for s in sorted(by_sym.keys()):
    info = by_sym[s]
    if s in VPTR3_ENABLED: strat = "VPTR3 enabled"
    elif s in VPTR3_DISABLED: strat = "VPTR3 disabled"
    elif s in RSI_SWING: strat = "RSI-SWING"
    elif s in SQW: strat = "SQW"
    elif s in RETTANGOLO_SIMPLE: strat = "RETTANGOLO_SIMPLE"
    elif s in RETTANGOLO_ENABLED: strat = "RETTANGOLO enabled"
    elif s in RETTANGOLO_DISABLED: strat = "RETTANGOLO disabled"
    elif s in MA_TRAILING_ENABLED: strat = "MA_TRAILING enabled"
    else: strat = "?"
    print(f"{s:14s} {info['n']:>4d} {info['pnl']:>+10.2f}  {strat}")
    total_pnl += info['pnl']
print(f"{'TOTALE':14s} {len(trades):>4d} {total_pnl:>+10.2f}")
print()

# Focus VPTR3: tutti i trade (enabled+disabled)
vptr3_all = [t for t in trades if t['symbol'] in (VPTR3_ENABLED | VPTR3_DISABLED)]
vptr3_pnl = sum(float(t.get('closedPnl', 0)) for t in vptr3_all)
print(f"=== VPTR3 totale (enabled+disabled) ===")
print(f"Trade: {len(vptr3_all)}  PnL: {vptr3_pnl:+.2f}")
print()

# Per VPTR3 enabled (doveva entrare nel backtest)
print(f"=== VPTR3 ENABLED (dovevano entrare nel backtest) ===")
vptr3_en = [t for t in vptr3_all if t['symbol'] in VPTR3_ENABLED]
en_pnl = sum(float(t.get('closedPnl', 0)) for t in vptr3_en)
print(f"Trade: {len(vptr3_en)}  PnL: {en_pnl:+.2f}")
for t in sorted(vptr3_en, key=lambda x: int(x.get('updatedTime', 0))):
    s = t['symbol']
    side = t['side']
    qty = t['qty']
    entry = t['avgEntryPrice']
    exit_p = t['avgExitPrice']
    pnl = t['closedPnl']
    d = datetime.fromtimestamp(int(t.get('updatedTime', 0))/1000).strftime('%Y-%m-%d %H:%M')
    print(f"  {d} {s:11s} {side:4s} qty={qty:>10s} entry={entry:>10s} exit={exit_p:>10s} pnl={pnl:>+8s}")
print()

# Per VPTR3 disabled (fonte -33)
print(f"=== VPTR3 DISABLED (fonte -33) ===")
vptr3_dis = [t for t in vptr3_all if t['symbol'] in VPTR3_DISABLED]
dis_pnl = sum(float(t.get('closedPnl', 0)) for t in vptr3_dis)
print(f"Trade: {len(vptr3_dis)}  PnL: {dis_pnl:+.2f}")
for t in sorted(vptr3_dis, key=lambda x: int(x.get('updatedTime', 0))):
    s = t['symbol']
    side = t['side']
    qty = t['qty']
    entry = t['avgEntryPrice']
    exit_p = t['avgExitPrice']
    pnl = t['closedPnl']
    d = datetime.fromtimestamp(int(t.get('updatedTime', 0))/1000).strftime('%Y-%m-%d %H:%M')
    print(f"  {d} {s:11s} {side:4s} qty={qty:>10s} entry={entry:>10s} exit={exit_p:>10s} pnl={pnl:>+8s}")
