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.resource.ResponseBuilder import *


mod = Blueprint('strategy', __name__, url_prefix=ResourceConstant.STRATEGY)


'''
@mod.route(ResourceConstant.STRATEGY_CALC, methods=['GET'])
def calculate_get():
    name = request.args.get('name', None)
    userId = request.headers.get('token')

    strategyCalculatorDataBean = StrategyDataLoader.load(userId, name)

    return ResponseBuilder.build(strategyCalculatorDataBean)        
'''

@mod.route(ResourceConstant.STRATEGY_CALC, methods=['POST'])
def calculate_post():
    parameters = request.get_json(force=True)
    userId = request.headers.get('token')
    
    strategyCalculatorDataBean =  StrategyCalculatorDataBeanBuilder.build(parameters)

    StrategyCalculatorProcessor.calculateOptions(strategyCalculatorDataBean)
    chartResult = StrategyCalculatorProcessor.calculateChart(strategyCalculatorDataBean)
    strategyCalculatorDataBean.chartData = chartResult

    return ResponseBuilder.build(strategyCalculatorDataBean)    

@mod.route(ResourceConstant.STRATEGY_CALC_OPTIONS, methods=['POST'])
def calculateOptions():
    parameters = request.get_json(force=True)
    userId = request.headers.get('token')
    
    strategyCalculatorDataBean =  StrategyCalculatorDataBeanBuilder.build(parameters)
    StrategyCalculatorProcessor.calculateOptions(strategyCalculatorDataBean)

    return ResponseBuilder.build(strategyCalculatorDataBean)        

@mod.route(ResourceConstant.STRATEGY_CALC_CHART, methods=['POST'])
def calculateChart():
    parameters = request.get_json(force=True)
    userId = request.headers.get('token')
    
    strategyCalculatorDataBean =  StrategyCalculatorDataBeanBuilder.build(parameters)

    chartResult = StrategyCalculatorProcessor.calculateChart(strategyCalculatorDataBean)

    return ResponseBuilder.build(chartResult.values.tolist())    


@mod.route(ResourceConstant.STRATEGY_CALC, methods=['POST'])
def calculate_save():
    parameters = request.get_json(force=True)
    userId = request.headers.get('token')
    
    strategyCalculatorDataBean =  StrategyCalculatorDataBeanBuilder.build(parameters)
    name = strategyCalculatorDataBean.name

    result = StrategyCalculatorProcessor.calculate(strategyCalculatorDataBean)
    strategyCalculatorDataBean.chartData = result
    
    StrategyDataLoader.same(userId, name, strategyCalculatorDataBean)

    return ResponseBuilder.build(strategyCalculatorDataBean)        

