from datetime import datetime

inversion_flags = {}

class SymbolState:
    def __init__(self, symbol):
        self.symbol = symbol
        self.last_time = None        # orario ultima inversione
        self.last_result = None      # LONG / SHORT / NEUTRAL
        self.last_value = None       # valore dominante precedente

class SymbolManager:
    def __init__(self):
        self.states = {}

    def ensure(self, symbol, new_state, current_value):
        """
        new_state: 'LONG', 'SHORT', 'NEUTRAL'
        current_value: valore dominante (es. SHORT=0.645)
        Ritorna: (new_state, changed, change_time, difference)
        """
        if symbol not in self.states:
            st = SymbolState(symbol)
            st.last_result = new_state
            st.last_value = current_value
            self.states[symbol] = st
            return new_state, False, None, None

        st = self.states[symbol]

        # Se cambia stato → inversione
        if st.last_result != new_state:
            old_value = st.last_value
            st.last_result = new_state
            st.last_value = current_value
            st.last_time = datetime.now().strftime("%H:%M:%S")
            
            inversion_flags[symbol] = True

            difference = None
            if old_value is not None:
                difference = current_value - old_value

            return new_state, True, st.last_time, difference

        # Nessuna inversione
        st.last_value = current_value
        return new_state, False, st.last_time, None
