import gradio as gr
import requests
import os
import numpy as np
import pandas as pd
import json
import socket
import huggingface_hub
from huggingface_hub import Repository
# from transformers import AutoTokenizer, AutoModelForSeq2SeqLM, AutoModelForSequenceClassification
from questiongenerator import QuestionGenerator
import csv
from urllib.request import urlopen
import re as r

qg = QuestionGenerator()

HF_TOKEN = os.environ.get("HF_TOKEN")
DATASET_NAME = "Text2Question"
DATASET_REPO_URL = f"https://huggingface.co/spaces/bhaskartripathi/{DATASET_NAME}"
DATA_FILENAME = "que_gen_logs.csv"
DATA_FILE = os.path.join("que_gen_logs", DATA_FILENAME)
DATASET_REPO_ID = "bhaskartripathi/Text2Question"
print("is none?", HF_TOKEN is None)
article_value = """Affecting computing is an artificial intelligence area of study that recognizes, interprets, processes, and simulates human affects. The user’s emotional states can be sensed through electroencephalography (EEG)-based Brain Computer Interfaces (BCI) devices. Research in emotion recognition using these tools is a rapidly growing field with multiple inter-disciplinary applications. This article performs a survey of the pertinent scientific literature from 2015 to 2020. It presents trends and a comparative analysis of algorithm applications in new implementations from a computer science perspective. Our survey gives an overview of datasets, emotion elicitation methods, feature extraction and selection, classification algorithms, and performance evaluation. Lastly, we provide insights for future developments."""
# REPOSITORY_DIR = "data"
# LOCAL_DIR = 'data_local'
# os.makedirs(LOCAL_DIR,exist_ok=True)

try:
    hf_hub_download(
        repo_id=DATASET_REPO_ID,
        filename=DATA_FILENAME,
        cache_dir=DATA_DIRNAME,
        force_filename=DATA_FILENAME
    )
    
except:
    print("file not found")

repo = Repository(
    local_dir="que_gen_logs", clone_from=DATASET_REPO_URL, use_auth_token=HF_TOKEN
)


def getIP():
    ip_address = ''
    try:
    	d = str(urlopen('http://checkip.dyndns.com/')
    			.read())
    
    	return r.compile(r'Address: (\d+\.\d+\.\d+\.\d+)').search(d).group(1)
    except Exception as e:
        print("Error while getting IP address -->",e)
        return ip_address

def get_location(ip_addr):
    location = {}
    try:
        ip=ip_addr
    
        req_data={
            "ip":ip,
            "token":"pkml123"
        }
        url = "https://bhaskartripathi.com/get-ip-location"
    
        # req_data=json.dumps(req_data)
        # print("req_data",req_data)
        headers = {'Content-Type': 'application/json'}
    
        response = requests.request("POST", url, headers=headers, data=json.dumps(req_data))
        response = response.json()
        print("response======>>",response)
        return response
    except Exception as e:
        print("Error while getting location -->",e)
        return location
    
def generate_questions(article,num_que):
    result = ''
    if article.strip():
        if num_que == None or num_que == '':
            num_que = 3
        else:
            num_que = num_que
        generated_questions_list = qg.generate(article, num_questions=int(num_que))
        summarized_data = {
            "generated_questions" : generated_questions_list
        }
        generated_questions = summarized_data.get("generated_questions",'')
            
        for q in generated_questions:
            print(q)
            result = result + q + '\n'
        #save_data_and_sendmail(article,generated_questions,num_que)
        print("sending result***!!!!!!", result)
        return result
    else:
        raise gr.Error("Please enter text in inputbox!!!!")
   
"""
Save generated details
"""
def save_data_and_sendmail(article,generated_questions,num_que):
    try:
        ip_address= getIP()
        print(ip_address)
        location = get_location(ip_address)
        print(location)
        add_csv = [article, generated_questions, num_que, ip_address,location]
        print("data^^^^^",add_csv)
        with open(DATA_FILE, "a") as f:
            writer = csv.writer(f)
            # write the data
            writer.writerow(add_csv)
            commit_url = repo.push_to_hub()
            print("commit data   :",commit_url)
            
        url = 'https://bhaskartripathi.com/HF_space_que_gen'
        
        myobj = {'article': article,'total_que': num_que,'gen_que':generated_questions,'ip_addr':ip_address,'loc':location}
        x = requests.post(url, json = myobj) 
        print("myobj^^^^^",myobj)

    except Exception as e:
        return "Error while sending mail" + str(e)
        
    return "Successfully save data"

## design 1
inputs=gr.Textbox(value=article_value, lines=5, label="Input Text/Article",elem_id="inp_div")
total_que = gr.Textbox(value=3, label="Enter the number of questions to generate",elem_id="inp_div")
outputs=gr.Textbox(label="Generated Questions",lines=6,elem_id="inp_div")

demo = gr.Interface(
    generate_questions,
    [inputs,total_que],
    outputs,
    title="Text2Question Generation with Text-to-Text-Transfer-Transformer",
    css=".gradio-container {background-color: lightgray} #inp_div {background-color: #7FB3D5;}",
    article="""<p style='text-align: center;'><a href="https://github.com/bhaskatripathi/QuestAnsGenerator/issues" target="_blank">Raise Issues</a></p>
                                        <p style='text-align: center;'>MultiCloud4U Sandbox Env <a href="https://www.multicloud4u.com" target="_blank">Multicloud4U Technologies Pvt. Ltd.</a></p>"""
    
)
demo.launch()