# coding:utf-8
import os
import pandas as pd

os.environ["CUDA_DEVICE_ORDER"] = "PCI_BUS_ID"
os.environ["CUDA_VISIBLE_DEVICES"] = "0"
import torch
from transformers import (
    AutoModelForSequenceClassification, AutoTokenizer, DataCollatorWithPadding,
    Trainer, TrainingArguments
)
from flask import Flask, jsonify
from flask import request
import uuid
app = Flask(__name__)
app.config["JSON_AS_ASCII"] = False
from threading import Thread
import redis
import uuid
import time
import json
import docx2txt


pool = redis.ConnectionPool(host='localhost', port=63179, max_connections=100, db=13, password="zhicheng123*")
redis_ = redis.Redis(connection_pool=pool, decode_responses=True)

db_key_query = 'query'
db_key_querying = 'querying'
db_key_queryset = 'queryset'
batch_size = 32

def ulit_request_file(file):
    file_name = file.filename
    file_name_save = "data/request/{}".format(file_name)
    file.save(file_name_save)

    if file_name.split(".")[-1] == "txt":
        try:
            with open(file_name_save, encoding="gbk") as f:
                content = f.read()
        except:
            with open(file_name_save, encoding="utf-8") as f:
                content = f.read()
    # elif file_name.split(".")[-1] == "docx":
    #     content = docx2txt.process(file_name_save)

    content_list = [i for i in content.split("\n")]
    print(content_list)
    return content_list


@app.route("/predict", methods=["POST"])
def handle_query_predict():
    print(request.remote_addr)

    # request.form.get('prompt')
    dataBases = ""
    minSimilarity = ""  # txt
    minWords = ""
    title = request.form.get("title")
    author = request.form.get("author")  # txt
    file = request.files.get('file')
    token = ""
    account = ""
    goodsId = ""
    callbackUrl = ""
    content_list = ulit_request_file(file)

    id_ = str(uuid.uuid1())  # 为query生成唯一标识
    id_ = id_.upper()
    print("uuid: ", id_)
    print(id_)
    d = {
        'id': id_,
        'dataBases': dataBases,
        'minSimilarity': minSimilarity,
        'minWords': minWords,
        'title': title,
        'author': author,
        'content_list': content_list,
        'token': token,
        'account': account,
        'goodsId': goodsId,
        'callbackUrl': callbackUrl
    }
    print(d)
    # 绑定文本和query id
    # recall_10(id_, title, abst_zh, content)

    load_request_path = './request_data_logs/{}.json'.format(id_)
    with open(load_request_path, 'w', encoding='utf8') as f2: # ensure_ascii=False才能输入中文,否则是Unicode字符 indent=2 JSON数据的缩进,美观
        json.dump(d, f2, ensure_ascii=False, indent=4)
    redis_.rpush(db_key_query, json.dumps({"id": id_, "path": load_request_path}))  # 加入redis

    return_text = {
        'code': 0,
        'msg': "请求成功",
        'data': {
            'balances': "",
            'orderId': id_,
            'consumeNum': ""
        }
    }

    return jsonify(return_text)  # 返回结果


if __name__ == "__main__":
    app.run(host="0.0.0.0", port=16005, threaded=True, debug=False)