-module(user).

-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").




%% 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, Option)->
    
    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_request{
        is_event = false,
        is_twoway = true,
        mid = de_id_count:gen_id(),
        data = Data,
        mversion= <<"0.0.0">>,
        serialize_type = ?SERIALIZATION_HESSIAN
    },
    dubbo_invoker:invoke_request(?CURRENT_CLASS_NAME,Request).


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

genUserId( Option)->
    
    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_request{
        is_event = false,
        is_twoway = true,
        mid = de_id_count:gen_id(),
        data = Data,
        mversion= <<"0.0.0">>,
        serialize_type = ?SERIALIZATION_HESSIAN
    },
    dubbo_invoker:invoke_request(?CURRENT_CLASS_NAME,Request).


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

queryUserInfo(Arg0, Option)->
    
    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_request{
        is_event = false,
        is_twoway = true,
        mid = de_id_count:gen_id(),
        data = Data,
        mversion= <<"0.0.0">>,
        serialize_type = ?SERIALIZATION_HESSIAN
    },
    dubbo_invoker:invoke_request(?CURRENT_CLASS_NAME,Request).


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

queryUserList(Arg0, Option)->
    
    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_request{
        is_event = false,
        is_twoway = true,
        mid = de_id_count:gen_id(),
        data = Data,
        mversion= <<"0.0.0">>,
        serialize_type = ?SERIALIZATION_HESSIAN
    },
    dubbo_invoker:invoke_request(?CURRENT_CLASS_NAME,Request).

