from cryptography.fernet import Fernet
from vibora import Vibora, JsonResponse, Request
from vibora.hooks import Events
from vibora.sessions.client import EncryptedCookiesEngine


app = Vibora()


@app.handle(Events.BEFORE_SERVER_START)
async def set_up_sessions(current_app: Vibora):
    # In this example every time the server is restart a new key will be generated, which means
    # you lose all your sessions... you may want to have a fixed key instead.
    current_app.session_engine = EncryptedCookiesEngine(
        'cookie_name', secret_key=Fernet.generate_key()
    )


@app.route('/')
async def home(request: Request):
    session = await request.session()
    if 'requests_count' in session:
        session['requests_count'] += 1
    else:
        session['requests_count'] = 0
    return JsonResponse({'a': 1, 'session': session.dump()})


if __name__ == '__main__':
    app.run(debug=True, port=8000, host='0.0.0.0')