# -*- coding: utf-8 -*-
# django-jsonrpc-aiohttp | (c) 2022-present Tomek Wójcik | MIT License
import asyncio
import logging
import os
import sys

from aiohttp import web
from bthlabs_jsonrpc_core import register_method

from bthlabs_jsonrpc_aiohttp import JSONRPCView

logger = logging.getLogger('bthlabs_jsonrpc_aiohttp_example')
logger.setLevel(logging.DEBUG)

handler = logging.StreamHandler(sys.stdout)
formatter = logging.Formatter(
    '%(asctime)s %(name)s: %(levelname)s: %(message)s',
)
handler.setFormatter(formatter)
logger.addHandler(handler)

app_logger = logging.getLogger('bthlabs_jsonrpc_aiohttp_example.app')

jsonrpc_logger = logger = logging.getLogger('bthlabs_jsonrpc')
jsonrpc_logger.setLevel(logging.DEBUG)
jsonrpc_logger.addHandler(handler)


async def app_on_startup(app):
    logger.info('BTHLabs JSONRPC aiohttp integration example')
    logger.debug('My PID = {pid}'.format(pid=os.getpid()))


@register_method('hello')
async def hello(request):
    return 'Hello, World!'


@register_method('async_test')
async def async_test(request, delay):
    await asyncio.sleep(delay)
    return 'It works!'


@register_method('hello', namespace='example')
async def hello_example(request):
    return 'Hello, Example!'


def create_app(loop=None):
    app = web.Application(logger=app_logger, loop=loop)
    app.on_startup.append(app_on_startup)

    app.add_routes([
        web.post('/rpc', JSONRPCView()),
        web.post('/example/rpc', JSONRPCView(namespace='example')),
    ])

    return app


app = create_app()