from app.entity.strategy.MarketInfo import *
from app.entity.strategy.Scenario import *
from app.entity.strategy.Position import *
from app.entity.strategy.StrategyCalculatorDataBean import *

from app.processor.strategy.StrategyCalculatorProcessor import *

class StrategyCalculatorDataBeanBuilder:
    @staticmethod
    def build(loadData):
        name = loadData['name']

        if 'axisMin' in loadData.keys():
            axisMin = loadData["axisMin"]
        else:
            axisMin = -1.
        if 'axisMax' in loadData.keys():
            axisMax = loadData["axisMax"]
        else:
            axisMax = -1.
        
        marketInfoDict = loadData['marketInfo']
        scenarioDict = loadData['scenario']
        
        portfolio = StrategyCalculatorDataBeanBuilder.buildPortfolio(loadData)
        scenarioResults = StrategyCalculatorDataBeanBuilder.buildPortfolio(loadData)
        chartDataBean = StrategyCalculatorDataBeanBuilder.buildChartDataBean(loadData)

        parameters = {
                      "name": name,
                      "axisMin": axisMin,
                      "axisMax": axisMax,
                      "marketInfo": MarketInfo(**marketInfoDict),
                      "scenario": Scenario(**scenarioDict),
                      "portfolio": portfolio,
                      "scenarioResults": scenarioResults,
                      "chartDataBean": chartDataBean
                      }

        strategyCalculatorDataBean = StrategyCalculatorDataBean(**parameters)
        
        return strategyCalculatorDataBean
    
    @staticmethod
    def buildPortfolio(loadData):
        if 'portfolio' in loadData.keys():
            portfolioDict = loadData['portfolio']
        else:
            portfolioDict = []
            
        portfolio = []
        for positionDict in portfolioDict:
            position = Position(**positionDict)
            portfolio.append(position)
        
        return portfolio
    
    
    @staticmethod
    def buildChartDataBean(loadData):
        if 'chartDataBean' in loadData.keys():
            chartDataDict = loadData['chartDataBean']
        else:
            chartDataDict = None

        return None