#!/usr/bin/env python
# -*- coding:utf-8 -*-
import json
from predict import dict_predict, kw_predict, txt_predict
from utils.status import code2msg, Status


class PredictorFac:
    Status = Status

    def __init__(self):

        self.kw_predictor = kw_predict.KwPredict('single')
        self.dict_predictor = dict_predict.DicPredict('dict')
        self.txt_predictor = txt_predict.TxtPredict('txt')

    def _get_predictor(self, data, predict_type):
        if isinstance(data, dict):
            return self.dict_predictor
        elif isinstance(data, list):
            if predict_type == 'all':
                return self.txt_predictor
            elif predict_type == 'param':
                return self.kw_predictor
        else:
            return self.kw_predictor

    def predict(self, dic_data, predict_type='all'):
        predictor = self._get_predictor(dic_data, predict_type)
        res = predictor.predict(dic_data, predict_type)
        if predict_type == 'all':
            try:
                if isinstance(predictor, dict_predict.DicPredict):
                    if '数量' not in str(res):
                        raise self.Status.NoQtyError
                    if '参数' not in str(res) and '型号' not in str(res):
                        raise self.Status.NoParamGnError
                return 1, res
            except Status.StatusErrTup as e:
                stat_code = e.value
                return stat_code, code2msg(stat_code)
        elif predict_type == 'param':
            return 1, res
        elif predict_type == 'brand':
            return 1, res
        elif predict_type == 'gn':
            return 1, res

if __name__ == "__main__":
    def get_test_data():
        import pandas as pd
        import json
        df = pd.read_excel(r'C:\Users\ICHUNT\Desktop\bomlist\BOM_型号匹配问题.xls', header=None)
        df.fillna('?', inplace=True)
        dic_dft = df.to_dict(orient='list')
        return dic_dft
    p = PredictorFac()

    # data = get_test_data()
    # data = {}
    # pretty_col = {'第%s列' % k: v for k, v in data.items()}
    # print(pretty_col)

    data=['lm358dt 3', 'C0806fwefhkds 5k']

    data = json.dumps(data)
    res = p.predict(data, predict_type='all')
    print(res)