
from app.entity.strategy.Scenario import *
from app.entity.simulation.SimulationCalculatorDataBean import *

from app.processor.strategy.StrategyDataLoader import *

class SimulationCalculatorDataBeanBuilder:
    @staticmethod
    def build(loadData, userId):
        strategyNames = loadData['strategyNames']
        if 'axisMin' in loadData.keys():
            axisMin = loadData["axisMin"]
        else:
            axisMin = -1.
        if 'axisMax' in loadData.keys():
            axisMax = loadData["axisMax"]
        else:
            axisMax = -1.
                
        scenarioDict = loadData['scenario']
        
        marketInfoDict = {}
        scenarioResultsDict = {}
        for name in strategyNames:
            strategyData = StrategyDataLoader.load(userId, name)
            if strategyData is None:
                continue
            
            marketInfoDict[name] = strategyData.marketInfo
            scenarioResultsDict[name] = strategyData.scenarioResults
        
        parameters = {
                      "strategyNames": strategyNames,
                      "axisMin": axisMin,
                      "axisMax": axisMax,
                      "scenario": Scenario(**scenarioDict),
                      "marketInfoDict": marketInfoDict,
                      "scenarioResultsDict": scenarioResultsDict,
                      }

        simulationCalculatorDataBean = SimulationCalculatorDataBean(**parameters)
        return simulationCalculatorDataBean
    
