import json
import bottle
from bottle import route, run, Jinja2Template, jinja2_view, request, static_file, hook, response
import functools
import logutil
from cheroot import wsgi

Jinja2Template.settings = {'autoescape': True}
view = functools.partial(jinja2_view, template_lookup=["templates"])

@hook('after_request')
def enable_cors():
    """
    You need to add some headers to each request.
    Don't use the wildcard '*' for Access-Control-Allow-Origin in production.
    """
    response.headers['Access-Control-Allow-Origin'] = '*'
    response.headers['Access-Control-Allow-Methods'] = 'PUT, GET, POST, DELETE, OPTIONS'
    response.headers['Access-Control-Allow-Headers'] = 'Origin, Accept, Content-Type, X-Requested-With, X-CSRF-Token'

@route('/')
@view('index.html')
def online():
    logfile = logutil.find_last_log('/opt/teamspeak')
    return {"people": logutil.get_online_users(tsdir='/opt/teamspeak'),
            "full_log": open(logfile).readlines()}

@route('/json')
def jsonline():
    logfile = logutil.find_last_log('/opt/teamspeak')
    online_users = logutil.get_online_users(logfile)
    full_log = open(logfile).readlines()

    return json.dumps({"people": online_users, "log": full_log})

@route('/static/:path#.+#', name='static')
def static(path):
    return static_file(path, root='static')


app = bottle.default_app()

server = wsgi.Server(('127.0.0.1', 65433), app)

try:
    server.start()
except KeyboardInterrupt:
    server.stop()
except:
    traceback.print_exc()

