import random
import os
import logging
import json
import time
import traceback
import ast
from gevent import monkey
monkey.patch_all()

from flask import Flask, request
from log import Log
from config import set_config
from ad_predict import get_creative_id_with_thompson

app = Flask(__name__)
log_ = Log()
config_ = set_config()

# log_.info(f"server start...")


@app.route('/healthcheck')
def health_check():
    return 'ok!'


@app.route('/ad/predict/getCreativeId', methods=['GET', 'POST'])
def get_creative_id():
    start_time = time.time()
    try:
        request_data = json.loads(request.get_data())
        mid = request_data.get('mid')
        creative_id_list = request_data.get('creativeIdList')
        thompson_result = get_creative_id_with_thompson(mid=mid, creative_id_list=creative_id_list)
        result = {'code': 200, 'message': 'success', 'data': {'mid': mid, 'creativeId': thompson_result['creative_id']}}
        log_message = {
            'requestUri': '/ad/predict/getCreativeId',
            'logTimestamp': int(time.time() * 1000),
            'requestData': request_data,
            'thompsonResult': thompson_result,
            'result': result,
            'executeTime': (time.time() - start_time) * 1000
        }
        log_.info(log_message)
        return json.dumps(result)

    except Exception as e:
        log_.error(traceback.format_exc())
        result = {'code': -1, 'message': 'fail'}
        return json.dumps(result)


if __name__ == '__main__':
    app.run()