import typing

from aws_lambda_tools.common.decorators import handle_session, aws_encode, json_encode
from aws_lambda_tools.common.response import Response
from conio_sdk_generated.openapi.v2.serde.models.signup import Signup

from conio_sdk.common.decorators import log_this, manage_errors
from conio_sdk.context import AWS_CONTEXT
from sdk_functions.functions import app_version, user_agent


@log_this
@handle_session(AWS_CONTEXT)
@aws_encode()
@json_encode(message_type=Signup)
@manage_errors
def signup(msg: Signup, event: typing.Dict, context=None) -> Response:
    from conio_sdk.ioc.vo.v2.signup_ioc import signup_vo_services
    from sdk_functions.functions import auth2resp, user_language
    authentication_data = signup_vo_services.signup(
        msg, app_version(context), user_agent(context), user_language(context))
    return auth2resp(authentication_data)
