# -*- coding: utf-8 -*-
import json
import os
from flask import Flask, request, redirect, url_for, session

app = Flask(__name__)

#In an actual project, this secret key would be hidden. 
#It is mostly used so we can create an example login session. 
app.secret_key = '&Gp07(pz#oIA]jQ'
super_secret_token = 'admin_token'

@app.route('/')
def none_handler():
    from templates.homepage import page
    return page.render() 


@app.route('/hello_world')
def hello_world_handler():
    from templates.hello_world import page
    return page.render()

@app.route('/star_wars')
def star_wars_handler():
    from templates.star_wars import page
    json_filename = os.path.join(app.static_folder, 'sw-people.json')
    with open(json_filename, 'r') as f:
        people = json.load(f)['characters']
    return page.render(characters=people)

@app.route('/list')
def render_list_handler():
    from templates.render_list import page
    return page.render()

@app.route('/static')
def static_files_handler():
    from templates.static_files import page
    return page.render()

@app.route('/table')
def table_handler():
    from templates.table_example import page
    return page.render()

@app.route('/css')
def css_handler():
    from templates.css_example import page
    return page.render()

@app.route('/user_login')
def login_handler():
    from templates.session_example.login_page import get_page

    if session.get('messages'):
        page = get_page(messages = session.pop('messages'))
    elif session.get('token') == super_secret_token: 
        return redirect(url_for('user_page_handler'))
    else: 
        page = get_page()
    return page.render()

@app.route('/user_logout', methods = ['POST'])
def logout_handler():
    if session.get('token'):
        session.pop('token')
    session['messages'] = ['Successfuly logged out!']
    return redirect(url_for('login_handler'))

@app.route('/user_page', methods = ['GET', 'POST'])
def user_page_handler():
    from templates.session_example.user_page import page
    data = dict(request.form)

    #In an actual project, you will probably want to use a db :)
    login_credentials = {'username' : 'admin', 'password' : 'admin'}

    if session.get('token') == super_secret_token: 
        success = True
    elif not data: 
        session['messages'] = ['You must login first. ']
        success = False
    elif data['username'] != login_credentials['username'] or data['password'] != login_credentials['password']:
        session['messages'] = ['Invalid credentials. ']
        success = False
    else:
        session['token'] = 'admin_token'
        success = True

    if not success: 
        return redirect(url_for('login_handler'))

    return page.render()


@app.route('/video_tag')
def video_tag_handler():
    from templates.video_tag import page
    return page.render()

@app.route('/form')
def form_handler():
    from templates.form_components import page
    return page.render()

@app.route('/homepage')
def homepage_handler():
    from templates.homepage import page
    return page.render()


if __name__ == '__main__':
    app.run(port=8888, debug=True)