#! /bin/python3

from random import choice
from flask import Flask, render_template, request
from configparser import ConfigParser
from datetime import datetime
import logging
import pytz

app = Flask(__name__,
            static_url_path='',
            static_folder='static',
            template_folder='templates')

config = ConfigParser()
config.read('config.ini')
logging.basicConfig(encoding='utf-8', level=logging.INFO, format='%(message)s')
logger = logging.getLogger('waitress')
tz = pytz.timezone(config.get('main', 'timezone'))

@app.after_request
def log_the_request(response):
    now = datetime.now(tz=tz)

    if 'X-Forwarded-For' in request.headers:
        remote_addr = request.headers['X-Forwarded-For']
    else:
        remote_addr = request.remote_addr

    if not request.remote_user:
        remote_user = "-"
    else:
        remote_user = request.remote_user

    if not request.referrer:
        referrer = "-"
    else:
        referrer = request.referrer

    if request.full_path[-1] == '?':
        full_path = request.full_path[:-1]
    else:
        full_path = request.full_path

    log = {
        'remote_addr': remote_addr,
        'remote_user': remote_user,
        'url': full_path,
        'date': now.strftime("%d/%b/%Y:%H:%M:%S %z"),
        'referrer': referrer,
        'user_agent': request.user_agent.string,
        'method': request.method,
        'content_length': response.content_length,
        'status_code': response.status_code
    }

    logfile = "{} - {} [{}] \"{} {}\" {} {} \"{}\" \"{}\"".format(log['remote_addr'], log['remote_user'], log['date'], log['method'], log['url'], log['status_code'], log['content_length'], log['referrer'], log['user_agent'])
    logger.info(logfile)

    return response

@app.route("/")
def hello():
    title = config.get('main', 'title')
    separator = config.get('main', 'separator')
    separator_char = config.get('main', 'separator_char')
    ablines = []

    now = datetime.now(tz=tz)
    epoch = now.timestamp()

    lines = getContent()
    while len(lines) < 2:
        logger.error('Error reading content')
        print(lines)
        lines = getContent()

    for line in lines:
        ab = line.split(separator_char)
        ablines.append(
            {'A': str(ab[0]), 'B': str(ab[1])}
        )

    with open("ab.txt", "r") as f:
        num_lines = sum(1 for _ in f)

    return render_template('index.html', title=title, separator=separator, content=ablines, num_lines=num_lines, epoch=epoch)

def getContent():
    lines = [a.strip() for a in open("ab.txt", "r").readlines()]
    result = [choice(lines) for a in range(5)]

    return result

if __name__ == "__main__":
    from waitress import serve
    serve(app, host='0.0.0.0', port=5000, ident='a/b game')