import pickle
from pprint import pprint

import pandas as pd
import categorical_util as cu
import numpy as np

model_file = 'MODEL_PATH/MODEL_FILE_NAME.sav'


features_test = 'FEATURES_FILE_PATH/FEATURES_FILE_NAME.csv'

# df = pd.read_csv(features_test, converters={'isStaticClass': bool}, index_col='index')
df = pd.read_csv(features_test, converters={'isStaticClass': bool})
# pprint(df)
# print(df.dtypes)

features = df.drop(columns=['Fullpathname', 'Classname', 'numInnerClasses'])
# print(features.dtypes)

# one hot encoding
features_replace = cu.get_one_hot_encoding(features)
# pprint(len(features_replace))
# pprint(features_replace.dtypes)

# create classPublicity_protected
add_features = pd.DataFrame(0, index=np.arange(len(features_replace)), columns=['classPublicity_protected']).astype(
    'category')

# pprint(add_features)
features_replace = features_replace.join(add_features)
# pprint(features_replace.dtypes)

add_features = pd.DataFrame(0, index=np.arange(len(features_replace)), columns=['classPublicity_default']).astype(
    'category')

# pprint(add_features)
features_replace = features_replace.join(add_features)
# pprint(features_replace.dtypes)

model = pickle.load(open(model_file, 'rb'))
labels_predicted = model.predict(features_replace)

df.loc[:,'pred_label'] = pd.Series(labels_predicted, index=features_replace.index)

# pprint(df)

# result_path = "RESULT_PATH/RESULT_FILE_NAME.csv"

df.to_csv(result_path, sep=',', index=True)