# -*- coding: utf-8 -*-
import click
from tornado.wsgi import WSGIContainer
from tornado.httpserver import HTTPServer
from tornado.web import Application, FallbackHandler
from tornado.ioloop import IOLoop
from application.app import create_app
from application.config import config
from views.monitor import DeviceMessageHandler, WatchHandler, NotifyHandler

# 根据配置初始化app
app = create_app(config)

host, port = tuple(config.BIND.split(":"))
print("===============>", host, port)

@click.group()
def cli():
    pass

@click.command()
def run():
    """
    生产模式启动命令函数
    To use: python3 manager.py run
    """
    # app.logger.setLevel(app.config.get('LOG_LEVEL', logging.INFO))
    http_server = HTTPServer(WSGIContainer(app))
    http_server.listen(int(port), address=host)
    IOLoop.instance().start()

@click.command()
def debug():
    """
    debug模式启动命令函数
    To use: python3 manager.py debug
    """

    wsgi_app = WSGIContainer(app)
    application = Application([
        (r"/api/v1/evm_store/monitor", DeviceMessageHandler),
        (r"/api/v1/evm_store/watch", WatchHandler),
        (r"/ws/v1/notify", NotifyHandler),
        (r'.*', FallbackHandler, dict(fallback=wsgi_app))
    ])

    application.listen(int(port), address=host)

    IOLoop.current().start()
    print("WebSocket Service Started......")

    # app.logger.setLevel(logging.DEBUG)
    # app.run(debug=True, port=int(port), host=host)

cli.add_command(debug)
cli.add_command(run)

if __name__ == '__main__':
    cli()