%%%-------------------------------------------------------------------
%%% @author dlive
%%% @copyright (C) 2017, <COMPANY>
%%% @doc
%%%
%%% @end
%%% Created : 30. Dec 2017 2:27 PM
%%%-------------------------------------------------------------------
-module(dubbo_node_config_util).
-author("dlive").

-include("dubbo.hrl").
%% API
-export([parse_provider_info/1,gen_provider_info/1]).

parse_provider_info(ProviderStr) when is_binary(ProviderStr)->
    parse_provider_info(binary_to_list(ProviderStr));
parse_provider_info(ProviderStr)->
    case http_uri:parse(http_uri:decode(ProviderStr),[{scheme_defaults,[{dubbo,20880}]}]) of
        {ok, {Scheme, _UserInfo, Host, Port, _Path, Query}} ->
            QueryStr = case lists:prefix("?",Query) of
                true ->
                    [_|Query2] = Query,
                    Query2;
                false->
                    Query
            end,
            QueryListTmp = string:tokens(QueryStr,"&"),
            ProviderConfig = parse_parameter(QueryListTmp,#provider_config{protocol=Scheme,host=Host,port = Port}),
            logger:debug("parse provider info string ~p,result: ~p",[ProviderStr,ProviderConfig]),
            {ok,ProviderConfig};
        {error,R1} ->
            logger:debug("parse provider error string ~p, error ~p",[ProviderStr,R1]),
            {error,R1}
    end.


parse_parameter([],Config)->
    Config;
parse_parameter([Item|Rest],Config)->
    case string:tokens(Item,"=") of
        KeyPair when length(KeyPair) ==2 ->
            [Key,Value] = KeyPair,
            ConfigNew = parse_parameter(Key,Value,Config),
            parse_parameter(Rest,ConfigNew);
        KeyPair2 ->
            logger:error("parse parameter error, keypair ~p",[KeyPair2]),
            parse_parameter(Rest,Config)
    end.
parse_parameter("anyhost",Value,Config)->
    Config#provider_config{anyhost = list_to_atom(Value)};
parse_parameter("application",Value,Config)->
    Config#provider_config{application = list_to_binary(Value)};
parse_parameter("dubbo",Value,Config)->
    Config#provider_config{dubbo = list_to_binary(Value)};
parse_parameter("executes",Value,Config)->
    Config#provider_config{executes = list_to_integer(Value)};
parse_parameter("interface",Value,Config)->
    Config#provider_config{interface = list_to_binary(Value)};
parse_parameter("methods",Value,Config)->
    MethodList= string:tokens(Value,","),
    MethodList2 = [list_to_binary(Item) || Item <- MethodList],
    Config#provider_config{methods = MethodList2};
parse_parameter("side",Value,Config)->
    Config#provider_config{side = list_to_binary(Value)};
parse_parameter("interface",Value,Config)->
    Config#provider_config{interface = list_to_binary(Value)};
parse_parameter(_,_,Config)->
    Config.

gen_provider_info(ProviderConfig)->
    Parameter=gen_provider_parameter(ProviderConfig),
    Info = io_lib:format("dubbo://~s:~p/~s?~s",[
        ProviderConfig#provider_config.host,
        ProviderConfig#provider_config.port,
        ProviderConfig#provider_config.interface,
        Parameter
    ]),
    list_to_binary(http_uri:encode(Info)).

gen_provider_parameter(Providerconfig) ->
    Method= [binary_to_list(Item) || Item <- Providerconfig#provider_config.methods],
    Method2= list_to_binary(string:join(Method,",")),
    List=[
        {<<"interface">>,Providerconfig#provider_config.interface},
        {<<"application">>,Providerconfig#provider_config.application},
        {<<"anyhost">>, <<"true">>},
        {<<"dubbo">>,Providerconfig#provider_config.dubbo},
        {<<"executes">>,integer_to_binary(Providerconfig#provider_config.executes)},
        {<<"methods">>,Method2},
        {<<"side">>,Providerconfig#provider_config.side},
        {<<"timestamp">>,integer_to_binary(time_util:timestamp_ms())}
    ],
    List2 = [io_lib:format("~ts=~ts",[Key,Value]) || {Key,Value} <- List],
    lists:flatten(string:join(List2,"&")).