import os.path as path

import sys
import pandas as pd
import pandas.io as pdio

from flask import Blueprint, request, jsonify, abort, Response

from app.resource.ResourceConstant import *

from app.entity.systemconfig.SystemEnumeration import *
from app.entity.systemconfig.SystemTemplate import *

from app.resource.CustomerJSONEncoder import *
from app.resource.ResponseBuilder import *

mod = Blueprint('systemConfig', __name__, url_prefix=ResourceConstant.SYSTEM_CONFIG)

appPath = path.dirname(__file__) + '/../../..'
    

@mod.route(ResourceConstant.SYSTEM_CONFIG_DATA_TEMPLATES, methods=['GET'])
def get_template():
    DATA_TEMPLATE = ['CalculatorDataBean', 
                     'Options',
                     'Stock',
                     'MarketInfo']
    
    templateDict = {}
    for x in DATA_TEMPLATE:
        templateFile = appPath + '/configure/template/' + x + '.csv'

        templateData = pdio.parsers.read_csv(templateFile, sep=',', header=0, na_values='', comment='#')
        print templateData

        template = []
        for i in templateData.index:
            systemTemplateDict = {
                                  "name": templateData.Name[i],
                                  "displayName": templateData.Display_Name[i],
                                  "dataType": templateData.Data_Type[i],
                                  "isInput": bool(templateData.Is_Input[i]),
                                  "isOutput": bool(templateData.Is_Output[i]),
                                  "isVisible": bool(templateData.Is_Visible[i]),
                                  "dataFormat": templateData.Data_Format[i],
                                  "defaultValue": templateData.Default_Value[i],
                                  "decimalFixed": int(templateData.Decimal_Fixed[i])
                                  }
            
            template.append(SystemTemplate(**systemTemplateDict))
        
        templateDict[x] = template
    
    resultWrapper = ResultWrapper(templateDict)
    return ResponseBuilder.build(resultWrapper)
    
   
@mod.route(ResourceConstant.SYSTEM_CONFIG_ENUMERATION, methods=['GET'])
def get_enumeration():
    ENUMERATION = appPath + '/configure/template/' + 'enumeration.csv'
    
    data = pdio.parsers.read_csv(ENUMERATION, sep=',', header=0, na_values=' ', comment='#')

    enumDict = {}
    for i in data.index:
        enumId = data.id[i]
        code = data.Code[i]
        displayName = data.Display_Name[i]
        
        enumValue = enumDict.get(enumId, [])
        enumValue.append(SystemEnumeration(code, displayName))
        enumDict[enumId] = enumValue
    
    resultWrapper = ResultWrapper(enumDict)
    return ResponseBuilder.build(resultWrapper)

