from flask import Blueprint, request

from app.resource.ResourceConstant import *

from app.processor.strategy.StrategyDataLoader import *
from app.processor.strategy.StrategyCalculatorProcessor import *
from app.entity.strategy.StrategyCalculatorDataBean import *

from app.processor.simulation.SimulationCalculatorDataBeanBuilder import *
from app.processor.simulation.SimulationCalculatorProcessor import *

from app.resource.ResponseBuilder import *


mod = Blueprint('simulation', __name__, url_prefix=ResourceConstant.SIMULATION)

@mod.route(ResourceConstant.SIMULATION_CALC, methods=['POST'])
def calculate_post():
    parameters = request.get_json(force=True)
    userId = request.headers.get('token')
    if userId is None:
        userId = 'guest'
    
    simulationCalculatorDataBean = SimulationCalculatorDataBeanBuilder.build(parameters, userId)
    SimulationCalculatorProcessor.calculate(simulationCalculatorDataBean)    
     
    resultWrapper = ResultWrapper(simulationCalculatorDataBean)
    return ResponseBuilder.build(resultWrapper)        

@mod.route(ResourceConstant.SIMULATION_CALC_CHART, methods=['POST'])
def calculateChart():
    parameters = request.get_json(force=True)
    userId = request.headers.get('token')
    if userId is None:
        userId = 'guest'
    
    print "chart here"
    simulationCalculatorDataBean = SimulationCalculatorDataBeanBuilder.build(parameters, userId)
    SimulationCalculatorProcessor.calculateChart(simulationCalculatorDataBean)    
    
    resultWrapper = ResultWrapper(simulationCalculatorDataBean)
    return ResponseBuilder.build(resultWrapper)        
 


@mod.route(ResourceConstant.SIMULATION_CALC_SCENARIO, methods=['POST'])
def calculateScenario():
    parameters = request.get_json(force=True)
    userId = request.headers.get('token')
    if userId is None:
        userId = 'guest'
    
    print "option here"
    simulationCalculatorDataBean = SimulationCalculatorDataBeanBuilder.build(parameters, userId)
    SimulationCalculatorProcessor.calculateScenario(simulationCalculatorDataBean)    
    
    resultWrapper = ResultWrapper(simulationCalculatorDataBean)
    return ResponseBuilder.build(resultWrapper)  
