import dash
from dash.dependencies import Output, Event, Input
import dash_core_components as dcc
import dash_html_components as html
import plotly
import random
import plotly.graph_objs as go
from collections import deque
import sqlite3
import pandas as pd

app = dash.Dash(__name__)
app.layout = html.Div(
    [html.H2('Live Twitter Sentiment'),
    dcc.Input(id='sentiment_term',value='twitter',type='text'),
    dcc.Graph(id='live-graph', animate=True),
    dcc.Interval(id='graph-update',interval=1000),])

@app.callback(Output('live-graph', 'figure'),
              [Input(component_id='sentiment_term',component_property='value')],
              events=[Event('graph-update', 'interval')])
def update_graph_scatter(sentiment_term):
    conn=sqlite3.connect('twitter.db')
    c=conn.cursor()
    df=pd.read_sql("SELECT * FROM sentiment WHERE tweet LIKE ? ORDER BY unix DESC LIMIT 1000", conn, params=('%' + sentiment_term + '%',))
    df.sort_values('unix',inplace=True)
    df['date'] = pd.to_datetime(df['unix'],unit='ms')
    df.set_index('date',inplace=True)
    df['smoothed_sentiment']=df['sentiment'].rolling(int(len(df)/2)).mean()
    df.dropna(inplace=True)

    X=df.index[-100:]
    Y=df.smoothed_sentiment.values[-100:]

    data = plotly.graph_objs.Scatter(
            x=list(X),
            y=list(Y),
            name='Scatter',
            mode= 'lines+markers'
            )

    return {'data': [data],'layout' : go.Layout(xaxis=dict(range=[min(X),max(X)]),
                                                yaxis=dict(range=[min(Y),max(Y)]),
                                                title='Term:{}'.format(sentiment_term))}



if __name__ == '__main__':
    app.run_server(debug=True)
