from flask import Flask
from flask import request
from flask import render_template
from vec2topic_app import *
import logging
import time
import datetime
import validators
import sql

app = Flask(__name__)

@app.route('/')
def my_form():
    return render_template("input.html")

@app.route('/', methods=['POST'])
def my_form_post():
    LOG_FILENAME='log_vec2topic.log'
    logging.basicConfig(filename=LOG_FILENAME,level=logging.INFO)
    logger = logging.getLogger()
    logger.setLevel(logging.INFO)
    formatter = logging.Formatter('%(asctime)s %(message)s',"%b-%d-%Y %H:%M:%S")
    logger.handlers[0].setFormatter(formatter)

    text = request.form['text']
    logger.info('*'*50)
    logger.info('Running Vec2Topic on %s' %text[:50])
    logger.info('*'*50)
    time1=time.time()
    
    try:
        if validators.url(text):
            text_store=text
            text=read_url(text)
            length=len(text.split())
            if text!='problem':
                result,metric,num_words,graph=vec2topic(cleanupContent(text,logger),logger)
            else:
                result='problem'
        else:
            text=cleanupContent(text,logger)
            if len(text)==0:
                text=["<nothing>"]
            text_store=text
            text_store=re.sub('[\']','',' '.join(text_store))
            text_store=re.sub('[\"]','',text_store)
            length=len(text_store.split())
            result,metric,num_words,graph=vec2topic(text,logger)

    except:
        result='problem'

    if result=='problem':
        status='Not OK'
    else:
        status='OK'

    now=datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    
    try:
        sql.insert_database(request.environ['REMOTE_ADDR'],now,text_store,length,status, '{:.2f}'.format(time.time()-time1))
    except:
        logger.info("sql error")
    


    if result=='problem':
        return render_template('error.html')
    else:
        if request.form['submit']=='Text':
            return render_template('results.html',result=result,time=(int(100*(time.time()-time1))*1./100),metric=metric,num_words="{:,}".format(num_words))
        else:
            return render_template('graph.html',graph=json.dumps(graph),result=result,time=(int(100*(time.time()-time1))*1./100),metric=metric,num_words="{:,}".format(num_words))
    


if __name__ == '__main__':
    app.run(host='0.0.0.0',debug=True)
    
