print(">>> DASHBOARD PlSoft <<<")

from datetime import datetime

def print_dashboard(results, previous_values=None, inversion_flags=None):
    print("\n" + "="*60)
    print(f"DASHBOARD - {datetime.now().strftime('%Y-%m-%d %H:%M:%S')}")
    print("="*60)

    for symbol, (long_p, short_p, neut_p) in results.items():

        # Frecce rispetto al ciclo precedente
        if previous_values and symbol in previous_values:
            prev_long, prev_short, prev_neut = previous_values[symbol]

            arrow_long  = "↑" if long_p  > prev_long  else ("↓" if long_p  < prev_long  else "→")
            arrow_short = "↑" if short_p > prev_short else ("↓" if short_p < prev_short else "→")
            arrow_neut  = "↑" if neut_p  > prev_neut  else ("↓" if neut_p  < prev_neut  else "→")
        else:
            arrow_long = arrow_short = arrow_neut = " "

        # Stato dominante
        state = max(
            (long_p, "LONG"),
            (short_p, "SHORT"),
            (neut_p, "NEUTRAL")
        )[1]

        dom_value = max(long_p, short_p, neut_p)

        # Calcolo Δ
        if previous_values and symbol in previous_values:
            prev_long, prev_short, prev_neut = previous_values[symbol]
            prev_dom_value = max(prev_long, prev_short, prev_neut)
            delta = dom_value - prev_dom_value
            delta_str = f"{delta:+.3f}"
        else:
            delta = 0
            delta_str = "   -   "

        # Parentesi quadre SOLO se inversione
        if inversion_flags and inversion_flags.get(symbol, False):
            dom_str = f"[{dom_value:.3f}]"
        else:
            dom_str = f"{dom_value:.3f}"

        # --- CALCOLO RISK SOLO SE Δ ≠ 0 ---
        risk_str = ""
        if delta != 0:

            # Dominante attuale
            if state == "LONG":
                second = max(short_p, neut_p)
                weakening = delta < 0
            elif state == "SHORT":
                second = max(long_p, neut_p)
                weakening = delta > 0
            else:  # NEUTRAL
                second = max(long_p, short_p)
                weakening = abs(delta) > 0.01

            # Intensità del movimento
            if weakening and abs(delta) > 0.03:
                risk_str = "   RISK=HIGH"
            elif weakening and abs(delta) > 0.01:
                risk_str = "   RISK=MEDIUM"
            elif weakening:
                risk_str = "   RISK=LOW"
        # -----------------------------------

        print(
            f"{symbol:<10}  "
            f"LONG={long_p:.3f} {arrow_long}   "
            f"SHORT={short_p:.3f} {arrow_short}   "
            f"NEUTRAL={neut_p:.3f} {arrow_neut}   "
            f"→ {state}={dom_str}   "
            f"Δ={delta_str}{risk_str}"
        )
