from py_jftech import component, autowired

from api import PortfoliosRisk, SignalType, RoboExecutor
from rebalance.base_signal import BaseRebalanceSignal
from rebalance.dao import robo_rebalance_signal as rrs


@component(bean_name='init')
class InitSignalBuilder(BaseRebalanceSignal):

    @autowired(names={'executor': RoboExecutor.use_name()})
    def __init__(self, executor: RoboExecutor = None):
        super(InitSignalBuilder, self).__init__()
        self._executor = executor

    @property
    def signal_type(self) -> SignalType:
        return SignalType.INIT

    def get_signal(self, day, risk: PortfoliosRisk):
        signal = rrs.get_last_one(max_date=day, risk=risk, type=SignalType.INIT)
        if signal:
            return None if signal['effective'] else signal
        return super().get_signal(self._executor.start_date, risk)

    def is_trigger(self, day, risk: PortfoliosRisk) -> bool:
        return True