from flask import render_template, request
from flask import Blueprint
from flask_login import current_user
import datetime
import json

import warnings
warnings.filterwarnings("ignore")
from elasticsearch import Elasticsearch
import flask_login

document = Blueprint('document', __name__, url_prefix='/document')

@document.route('/ja')
@flask_login.login_required
def search_doc_ja():
    D_es = Elasticsearch("http://160.248.189.116:9200", http_auth = ('elastic', 'btqJrBAQJvnnp9xW-3iK'))
    es = Elasticsearch("http://164.70.95.77:9200", http_auth = ('elastic', 'wRnciG81ueoSxNs=Qohd'))
    query_r = request.args.get('query')
    f_res = es.search(index = 'sample01', query = {
                "match":{"ID": query_r }
            },
            _source = ['Vector'],
            size = 1)
    dt_now = datetime.datetime.now()
    Log = {"user": current_user.get_id(), "mode": "document", "query": query_r, "datetime": str(dt_now),"database": "sample01", "view": 20}
    D_es.create(index="log01",body=Log,id=str(dt_now).replace(" ",""))
    for doc in f_res['hits']['hits']:
        dict1 = doc['_source']
        t_vec = dict1['Vector']

    res = es.search(index = 'sample01', _source = ['Label', 'Title','Publisher', 'ID', 'Public_date', 'N_label', 'E_label', 'URL', 'Language', 'Type'],
            size = 21, query = {
                "function_score": {
                "query": {
                    "match_all": {}
                },
                "functions": [
                    {
                    "script_score": {
                        "script": {
                        "source": "cosineSimilarity(params.queryVector, 'Vector') + 1.0",
                        "params": {
                            "queryVector": t_vec
                        }
                                    }
                        }
                    } 
                ]
                }
            }
        )
    
    title_list = []
    text_list = []
    publisher_list = []
    score_list = []
    ID_list = []
    e_label_list = []
    n_label_list = []
    url_list = []
    language_list = []
    type_list = []
    public_date_list = []

    for doc in res['hits']['hits']:
        dict1 = doc['_source']
        score_list.append(doc['_score'])
        title_list.append(dict1['Title'])
        ID_list.append(dict1['ID'])
        publisher_list.append(dict1['Publisher'])
        e_label_list.append(', '.join(dict1['E_label']))
        n_label_list.append(', '.join(dict1['N_label']))
        url_list.append(dict1['URL'])
        language_list.append(dict1['Language'])
        type_list.append(dict1['Type'])
        public_date_list.append(dict1['Public_date'])
            
    hit = []
    
    for i in range(len(title_list)):
        hit.append({'title': title_list[i], 'publisher': publisher_list[i], 'ID': ID_list[i], 'distance': score_list[i], 'E_label': e_label_list[i], 'N_label': n_label_list[i], 'URL': url_list[i], 'Language': language_list[i], 'Type': type_list[i], 'Public_date': public_date_list[i]})
    del hit[0]

    return render_template("search-card-ja.html", hit = hit)

@document.route('/en')
@flask_login.login_required
def search_doc_en():
    D_es = Elasticsearch("http://160.248.189.116:9200", http_auth = ('elastic', 'btqJrBAQJvnnp9xW-3iK'))
    es = Elasticsearch("http://164.70.95.77:9200", http_auth = ('elastic', 'wRnciG81ueoSxNs=Qohd'))
    query_r = request.args.get('query')
    f_res = es.search(index = 'sample01', query = {
                "match":{"ID": query_r }
            },
            _source = ['Vector'],
            size = 1)
    dt_now = datetime.datetime.now()
    Log = {"user": current_user.get_id(), "mode": "document", "query": query_r, "datetime": str(dt_now), "database": "sample01", "view": 20}
    D_es.create(index="log01",body=Log,id=str(dt_now).replace(" ",""))
    for doc in f_res['hits']['hits']:
        dict1 = doc['_source']
        t_vec = dict1['Vector']

    res = es.search(index = 'sample01', _source = ['Label', 'Title','Publisher', 'ID', 'Public_date', 'N_label', 'E_label', 'URL', 'Language', 'Type'],
            size = 21, query = {
                "function_score": {
                "query": {
                    "match_all": {}
                },
                "functions": [
                    {
                    "script_score": {
                        "script": {
                        "source": "cosineSimilarity(params.queryVector, 'Vector') + 1.0",
                        "params": {
                            "queryVector": t_vec
                        }
                                    }
                        }
                    } 
                ]
                }
            }
        )
    
    title_list = []
    text_list = []
    publisher_list = []
    score_list = []
    ID_list = []
    e_label_list = []
    n_label_list = []
    url_list = []
    language_list = []
    type_list = []
    public_date_list = []

    for doc in res['hits']['hits']:
        dict1 = doc['_source']
        score_list.append(doc['_score'])
        title_list.append(dict1['Title'])
        ID_list.append(dict1['ID'])
        publisher_list.append(dict1['Publisher'])
        e_label_list.append(', '.join(dict1['E_label']))
        n_label_list.append(', '.join(dict1['N_label']))
        url_list.append(dict1['URL'])
        language_list.append(dict1['Language'])
        type_list.append(dict1['Type'])
        public_date_list.append(dict1['Public_date'])
            
    hit = []
    
    for i in range(len(title_list)):
        hit.append({'title': title_list[i], 'publisher': publisher_list[i], 'ID': ID_list[i], 'distance': score_list[i], 'E_label': e_label_list[i], 'N_label': n_label_list[i], 'URL': url_list[i], 'Language': language_list[i], 'Type': type_list[i], 'Public_date': public_date_list[i]})
    del hit[0]

    return render_template("search-card-en.html", hit = hit)
