"""Test 3 ISOLATO: anti-cluster-loss.
NON richiede il runner, solo il modulo.
"""
import os
import sys
import time
import json
from pathlib import Path

V2_DIR = "/opt/charter-live/live_deploy_v2"
sys.path.insert(0, V2_DIR)
os.chdir(V2_DIR)

import anti_cluster_loss

print("=" * 70)
print("TEST 3: ANTI-CLUSTER-LOSS")
print("=" * 70)

# Stato iniziale
print("\n[3.1] Stato iniziale (no SL registrati):")
state = anti_cluster_loss.get_state()
print(f"  state: {state}")
print(f"  should_pause('BTCUSDT') = {anti_cluster_loss.should_pause('BTCUSDT')} (atteso: False)")
print(f"  should_pause('ETHUSDT') = {anti_cluster_loss.should_pause('ETHUSDT')} (atteso: False)")

# Test: 1 SL su BTCUSDT
print("\n[3.2] Simula 1 SL su BTCUSDT:")
anti_cluster_loss.record_sl('BTCUSDT')
state = anti_cluster_loss.get_state()
sym_state = state.get('symbols', {}).get('BTCUSDT', {})
print(f"  BTCUSDT state: {sym_state}")
print(f"  should_pause('BTCUSDT') = {anti_cluster_loss.should_pause('BTCUSDT')} (atteso: False)")

# Test: 2 SL su BTCUSDT (dovrebbe triggerare pausa)
print("\n[3.3] Simula 2° SL su BTCUSDT (dovrebbe triggerare pausa 4h):")
anti_cluster_loss.record_sl('BTCUSDT')
state = anti_cluster_loss.get_state()
sym_state = state.get('symbols', {}).get('BTCUSDT', {})
print(f"  BTCUSDT state: {sym_state}")
should_pause = anti_cluster_loss.should_pause('BTCUSDT')
print(f"  should_pause('BTCUSDT') = {should_pause} (atteso: True)")

if should_pause:
    paused_until = sym_state.get('paused_until', 0)
    remaining_h = (paused_until - time.time()) / 3600
    print(f"  paused_until = {paused_until} (now+{remaining_h:.2f}h)")
    print(f"  TEST 3 PASS: 2 SL consecutivi triggerano pausa 4h")
else:
    print(f"  TEST 3 FAIL: should_pause NON ritorna True dopo 2 SL")

# Test: WIN resetta il counter
print("\n[3.4] Simula WIN su BTCUSDT (dovrebbe resettare counter):")
anti_cluster_loss.record_win('BTCUSDT')
state = anti_cluster_loss.get_state()
sym_state = state.get('symbols', {}).get('BTCUSDT', {})
print(f"  BTCUSDT state dopo WIN: {sym_state}")
print(f"  should_pause('BTCUSDT') = {anti_cluster_loss.should_pause('BTCUSDT')} (atteso: False)")

# Test: pausa su un altro symbol non è influenzata
print("\n[3.5] Re-trigger pausa su BTCUSDT + verifica che ETHUSDT non è impattato:")
anti_cluster_loss.record_sl('BTCUSDT')
anti_cluster_loss.record_sl('BTCUSDT')
print(f"  BTCUSDT paused: {anti_cluster_loss.should_pause('BTCUSDT')} (atteso: True)")
print(f"  ETHUSDT paused: {anti_cluster_loss.should_pause('ETHUSDT')} (atteso: False)")
print(f"  SOLUSDT paused: {anti_cluster_loss.should_pause('SOLUSDT')} (atteso: False)")

# Cleanup
print("\n[3.6] Cleanup: reset anti_cluster_state")
state_file = Path("/opt/charter-live/live_deploy_v2/logs/anti_cluster_state.json")
if state_file.exists():
    state_file.unlink()
    print(f"  state file rimosso")
