import typing

from aws_lambda_tools.common.decorators import handle_session, aws_encode
from conio_sdk_generated.openapi.v2.serde.models.signin import Signin
from conio_sdk_generated.openapi.v2.serde.models.signin_response import SigninResponse

from conio_sdk.common.decorators import log_this, manage_errors
from conio_sdk.context import AWS_CONTEXT
from conio_sdk.logging.factory import LOGGING_FACTORY
from sdk_functions.functions import hardware_id
from sdk_functions.functions.v2.security import x_www_form_urlencoded


@log_this
@handle_session(AWS_CONTEXT)
@aws_encode()
@x_www_form_urlencoded(message_type=Signin)
@manage_errors
def login_external_user_id(msg: Signin, event: typing.Dict, context=None) -> SigninResponse:
    LOGGING_FACTORY.test.info('login external user id %s', msg)
    from conio_sdk.ioc.vo.v2.signin_ioc import signin_vo_services
    from sdk_functions.functions import user_language
    return signin_vo_services.signin_external_user_id(msg, hardware_id(context), user_language(context))


@log_this
@handle_session(AWS_CONTEXT)
@aws_encode()
@x_www_form_urlencoded(message_type=Signin)
@manage_errors
def login_email(msg: Signin, event: typing.Dict, context=None) -> SigninResponse:
    from conio_sdk.ioc.vo.v2.signin_ioc import signin_vo_services
    from sdk_functions.functions import user_language
    return signin_vo_services.signin_email(msg, hardware_id(context), user_language(context))
