import base64

import tensorflow as tf
import requests
import time




with open('/Users/edz/software/Recommend/train_samples.csv', 'r') as f:


    count = 0
    examples = []
    for line in f:

        #         print(line)
        splits = line.split('|')
        features = {
            'ITEM_CATEGORY_card_id': tf.train.Feature(bytes_list=tf.train.BytesList(value=[splits[0].encode()])),
            'USER_CATEGORY_device_id': tf.train.Feature(bytes_list=tf.train.BytesList(value=[splits[2].encode()])),
            'USER_CATEGORY_os': tf.train.Feature(bytes_list=tf.train.BytesList(value=[splits[3].encode()])),
            'USER_CATEGORY_user_city_id': tf.train.Feature(bytes_list=tf.train.BytesList(value=[splits[4].encode()])),
            'USER_MULTI_CATEGORY_second_solutions': tf.train.Feature(
                bytes_list=tf.train.BytesList(value=list(map(lambda s: s.encode(), splits[6].split(','))))),
            'USER_MULTI_CATEGORY_second_demands': tf.train.Feature(
                bytes_list=tf.train.BytesList(value=list(map(lambda s: s.encode(), splits[7].split(','))))),
            'USER_MULTI_CATEGORY_second_positions': tf.train.Feature(
                bytes_list=tf.train.BytesList(value=list(map(lambda s: s.encode(), splits[8].split(','))))),
            'USER_MULTI_CATEGORY_projects': tf.train.Feature(
                bytes_list=tf.train.BytesList(value=list(map(lambda s: s.encode(), splits[9].split(','))))),
            'ITEM_NUMERIC_click_count_sum': tf.train.Feature(float_list=tf.train.FloatList(value=[float(splits[10])])),
            'ITEM_NUMERIC_click_count_avg': tf.train.Feature(float_list=tf.train.FloatList(value=[float(splits[11])])),
            'ITEM_NUMERIC_click_count_stddev': tf.train.Feature(
                float_list=tf.train.FloatList(value=[float(splits[12])])),
            'ITEM_NUMERIC_exp_count_sum': tf.train.Feature(float_list=tf.train.FloatList(value=[float(splits[13])])),
            'ITEM_NUMERIC_exp_count_avg': tf.train.Feature(float_list=tf.train.FloatList(value=[float(splits[14])])),
            'ITEM_NUMERIC_exp_count_stddev': tf.train.Feature(float_list=tf.train.FloatList(value=[float(splits[15])])),
            'ITEM_NUMERIC_discount': tf.train.Feature(float_list=tf.train.FloatList(value=[float(splits[16])])),
            'ITEM_NUMERIC_case_count': tf.train.Feature(float_list=tf.train.FloatList(value=[float(splits[17])])),
            'ITEM_NUMERIC_sales_count': tf.train.Feature(float_list=tf.train.FloatList(value=[float(splits[18])])),
            'ITEM_CATEGORY_service_type': tf.train.Feature(bytes_list=tf.train.BytesList(value=[splits[19].encode()])),
            'ITEM_CATEGORY_merchant_id': tf.train.Feature(bytes_list=tf.train.BytesList(value=[splits[20].encode()])),
            'ITEM_CATEGORY_doctor_type': tf.train.Feature(bytes_list=tf.train.BytesList(value=[splits[21].encode()])),
            'ITEM_CATEGORY_doctor_id': tf.train.Feature(bytes_list=tf.train.BytesList(value=[splits[22].encode()])),
            'ITEM_CATEGORY_doctor_famous': tf.train.Feature(bytes_list=tf.train.BytesList(value=[splits[23].encode()])),
            'ITEM_CATEGORY_hospital_id': tf.train.Feature(bytes_list=tf.train.BytesList(value=[splits[24].encode()])),
            'ITEM_CATEGORY_hospital_city_tag_id': tf.train.Feature(
                bytes_list=tf.train.BytesList(value=[splits[25].encode()])),
            'ITEM_CATEGORY_hospital_type': tf.train.Feature(bytes_list=tf.train.BytesList(value=[splits[26].encode()])),
            'ITEM_CATEGORY_hospital_is_high_quality': tf.train.Feature(
                bytes_list=tf.train.BytesList(value=[splits[27].encode()])),
            'ITEM_MULTI_CATEGORY_second_demands': tf.train.Feature(
                bytes_list=tf.train.BytesList(value=list(map(lambda s: s.encode(), splits[28].split(','))))),
            'ITEM_MULTI_CATEGORY_second_solutions': tf.train.Feature(
                bytes_list=tf.train.BytesList(value=list(map(lambda s: s.encode(), splits[29].split(','))))),
            'ITEM_MULTI_CATEGORY_second_positions': tf.train.Feature(
                bytes_list=tf.train.BytesList(value=list(map(lambda s: s.encode(), splits[30].split(','))))),
            'ITEM_MULTI_CATEGORY_projects': tf.train.Feature(
                bytes_list=tf.train.BytesList(value=list(map(lambda s: s.encode(), splits[31].split(','))))),
            'ITEM_NUMERIC_sku_price': tf.train.Feature(float_list=tf.train.FloatList(value=[float(splits[32])])),
            'label': tf.train.Feature(int64_list=tf.train.Int64List(value=[int(splits[5])])),
        }
        #         print(features)

        #         print(splits[32])
        tf_features = tf.train.Features(feature=features)

        tf_example = tf.train.Example(features=tf_features)

        tf_serialized = tf_example.SerializeToString()

        examples.append({'b64': base64.b64encode(tf_serialized)})

        count += 1
        if count == 1000:
            break
    start = time.time()
    res = requests.post("http://localhost:8501/v1/models/wide_deep:predict",
                        json={"inputs": {"examples": examples},
                              "signature_name": "predict"})
    print(res.text)
    print(time.time() - start)