from framework import component, autowired
from api import SignalBuilder, PortfoliosRisk, SignalType
from rebalance.dao import robo_rebalance_signal as rrs


@component(bean_name='curve-drift')
class CurveDrift(SignalBuilder):

    @property
    def exclude_last_type(self):
        return [
            SignalType.CRISIS_ONE,
            SignalType.CRISIS_TWO,
            SignalType.MARKET_RIGHT,
            SignalType.INIT,
            SignalType.LOW_BUY
        ]

    def get_signal(self, day, risk: PortfoliosRisk):
        last_re = rrs.get_last_one(max_date=day, risk=risk, effective=True)
        if last_re is None or SignalType(last_re['type']) in self.exclude_last_type:
            return None