-module(user2).

-include_lib("dubboerl/include/dubbo.hrl").
-include_lib("dubboerl/include/hessian.hrl").

-define(CURRENT_CLASS_NAME,<<"com.ifcoder.demo.facade.User"/utf8>>).
-define(CURRENT_CLASS_VERSION,<<"0.0.0"/utf8>>).

-include("dubbo_service.hrl").


-export([test/0]).

%% API
-export([
    getUserInfo/1,
    getUserInfo/2,
    genUserId/0,
    genUserId/1,
    queryUserInfo/1,
    queryUserInfo/2,
    queryUserList/1,
    queryUserList/2]).

-export([get_method_999_list/0]).

%% behaviour
-callback getUserInfo(Arg0::list())-> #userInfo{}.
-callback genUserId()-> list().
-callback queryUserInfo(Arg0::#userInfoRequest{})-> #userInfo{}.
-callback queryUserList(Arg0::list())-> #userRes{}.

get_method_999_list()->
    [
    getUserInfo,
    genUserId,
    queryUserInfo,
    queryUserList].



-spec getUserInfo(Arg0::list())->
    {ok,reference()}|
    {ok,reference(),Data::#userInfo{},RpcContent::list()}|
    {error,Reason::timeout|no_provider|any()}.
getUserInfo(Arg0)->
    getUserInfo(Arg0 ,#{}).

getUserInfo(Arg0, RequestOption)->
    
    Data = #dubbo_rpc_invocation{
        className = ?CURRENT_CLASS_NAME,
        classVersion = ?CURRENT_CLASS_VERSION,
        methodName = <<"getUserInfo">>,
        parameterDesc = <<"Ljava/lang/String;"/utf8>>,
        parameterTypes = [
            #type_def{foreign_type = <<"java.lang.String">>,
            native_type = string,
            fieldnames = []}
        ],
        parameters = [
            Arg0
        ],
        attachments = [
            {<<"path">>, ?CURRENT_CLASS_NAME},
            {<<"interface">> , ?CURRENT_CLASS_NAME}
        ]
    },
    Request = dubbo_adapter:reference(Data),
    dubbo_invoker:invoke_request(?CURRENT_CLASS_NAME,Request,RequestOption).


-spec genUserId()->
    {ok,reference()}|
    {ok,reference(),Data::list(),RpcContent::list()}|
    {error,Reason::timeout|no_provider|any()}.
genUserId()->
    genUserId( #{}).

genUserId( RequestOption)->
    
    Data = #dubbo_rpc_invocation{
        className = ?CURRENT_CLASS_NAME,
        classVersion = ?CURRENT_CLASS_VERSION,
        methodName = <<"genUserId">>,
        parameterDesc = <<""/utf8>>,
        parameterTypes = [
            
        ],
        parameters = [
            
        ],
        attachments = [
            {<<"path">>, ?CURRENT_CLASS_NAME},
            {<<"interface">> , ?CURRENT_CLASS_NAME}
        ]
    },
    Request = dubbo_adapter:reference(Data),
    dubbo_invoker:invoke_request(?CURRENT_CLASS_NAME,Request,RequestOption).


-spec queryUserInfo(Arg0::#userInfoRequest{})->
    {ok,reference()}|
    {ok,reference(),Data::#userInfo{},RpcContent::list()}|
    {error,Reason::timeout|no_provider|any()}.
queryUserInfo(Arg0)->
    queryUserInfo(Arg0 ,#{}).

queryUserInfo(Arg0, RequestOption)->
    
    Data = #dubbo_rpc_invocation{
        className = ?CURRENT_CLASS_NAME,
        classVersion = ?CURRENT_CLASS_VERSION,
        methodName = <<"queryUserInfo">>,
        parameterDesc = <<"Lcom/ifcoder/demo/bean/UserInfoRequest;"/utf8>>,
        parameterTypes = [
            #type_def{foreign_type = <<"com.ifcoder.demo.bean.UserInfoRequest">>,
            native_type = userInfoRequest,
            fieldnames = record_info(fields,userInfoRequest)}
        ],
        parameters = [
            Arg0
        ],
        attachments = [
            {<<"path">>, ?CURRENT_CLASS_NAME},
            {<<"interface">> , ?CURRENT_CLASS_NAME}
        ]
    },
    Request = dubbo_adapter:reference(Data),
    dubbo_invoker:invoke_request(?CURRENT_CLASS_NAME,Request,RequestOption).


-spec queryUserList(Arg0::list())->
    {ok,reference()}|
    {ok,reference(),Data::#userRes{},RpcContent::list()}|
    {error,Reason::timeout|no_provider|any()}.
queryUserList(Arg0)->
    queryUserList(Arg0 ,#{}).

queryUserList(Arg0, RequestOption)->
    
    Data = #dubbo_rpc_invocation{
        className = ?CURRENT_CLASS_NAME,
        classVersion = ?CURRENT_CLASS_VERSION,
        methodName = <<"queryUserList">>,
        parameterDesc = <<"Ljava/lang/String;"/utf8>>,
        parameterTypes = [
            #type_def{foreign_type = <<"java.lang.String">>,
            native_type = string,
            fieldnames = []}
        ],
        parameters = [
            Arg0
        ],
        attachments = [
            {<<"path">>, ?CURRENT_CLASS_NAME},
            {<<"interface">> , ?CURRENT_CLASS_NAME}
        ]
    },
    Request = dubbo_adapter:reference(Data),
    dubbo_invoker:invoke_request(?CURRENT_CLASS_NAME,Request,RequestOption).


test()->
    queryUserInfo(#userInfoRequest{username = "name",requestId = "111"},#{sync=> true}).