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",error=False)

@app.route('/', methods=['POST'])
def my_form_post():
    error=False
    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(re.sub(' ','',text)):
            text=re.sub(' ','',text)
            text_store=text
            text=read_url(text)
            length=len(text.split())
            if text!='problem':
                result,metric,num_words=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=vec2topic(text,logger)

    except Exception as e:
        result='problem'
        return e

    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('input.html',error=True)
    else:
        return render_template('results.html',result=result,time=(int(100*(time.time()-time1))*1./100),metric=metric,num_words="{:,}".format(num_words))




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

