from clever_brag_adapter import BRAGArgument, CleverBragAmqpAdapter

from amqp.config.amq_configuration import AMQConfiguration


class R2RApp:
    pass


def create_r2r_app():
    return R2RApp()


if __name__ == "__main__":

    #
    # r2rapp: R2RApp = await create_r2r_app()
    #
    # In the standalone test context, need to start the loop as well. In the actual BRAG context,
    # use 'await' instead.
    r2rapp: R2RApp = create_r2r_app()

    adapter: CleverBragAmqpAdapter = CleverBragAmqpAdapter(
        AMQConfiguration("./application.properties.local"),
        r2rapp.app.routes,
        r2rapp.providers.auth,
        {"app": r2rapp.config.app},
    )

    for method, routes in adapter.routes.items():
        print(f"Method: {method}")
        for _route in routes:
            print(
                f"  Route: {_route.path} -> {_route.endpoint.__module__}.{_route.endpoint.__name__}"
            )
            _args = getattr(_route.endpoint, "__annotations__", {})
            _verified_args = []
            for arg in _args:
                _arg = BRAGArgument(_args[arg])
                _verified_args.append(_arg)
            print(f"    Arguments: {', '.join(map(str, _verified_args))}")
            print("---------------------------")
    print("Press ^C to exit...")
    adapter.thread.join()
