#! /bin/python3

from flask import Flask, render_template
from configparser import ConfigParser
from datetime import datetime
import random
import pytz

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

config = ConfigParser()
config.read('config.ini')
tz = pytz.timezone(config.get('main', 'timezone'))

i18n = {
    'lang': config.get('i18n', 'lang'),
    'title': config.get('i18n', 'title'),
    'more': config.get('i18n', 'more'),
    'desc': config.get('i18n', 'desc'),
    'questions_prefix': config.get('i18n', 'questions_prefix'),
    'questions_suffix': config.get('i18n', 'questions_suffix'),
    'separator': config.get('i18n', 'separator'),
    'mailtext': config.get('i18n', 'mail_link'),
    'helptext': config.get('i18n', 'help_link'),
    'help': config.get('i18n', 'help')
}
conf = {
    'separator_char': config.get('main', 'separator_char'),
    'mailto': config.get('main', 'mail'),
    'url': config.get('main', 'base_url'),
    'theme': config.get('main', 'theme'),
    'animations': config.get('main', 'animations')
}

def getEpoch():
    now = datetime.now(tz=tz)
    epoch = now.timestamp()
    epoch = int(epoch)

    return epoch

@app.errorhandler(404)
def page_not_found(e):
    epoch = getEpoch()
    return render_template('404.html', config=conf, i18n=i18n, epoch=epoch), 404

@app.errorhandler(500)
def internal_server_error(e):
    epoch = getEpoch()
    return render_template('500.html', config=conf, i18n=i18n, epoch=epoch), 500

@app.route("/")
def hello():
    ablines = []
    epoch = getEpoch()

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

    for line in lines:
        ab = line.split(conf['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', content=ablines, config=conf, i18n=i18n, num_lines=num_lines, epoch=epoch)

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

    return result

app.register_error_handler(404, page_not_found)
app.register_error_handler(500, internal_server_error)

if __name__ == "__main__":
    from waitress import serve
    bind = config.get('main', 'bind')
    port = config.get('main', 'port')

    serve(app, host=bind, port=port, ident='a/b game')