%%%-------------------------------------------------------------------
%% @doc grpcbox public API
%% @end
%%%-------------------------------------------------------------------

-module(grpcbox_app).

-behaviour(application).

-export([start/2, stop/1]).

-include("grpcbox.hrl").

start(_StartType, _StartArgs) ->
    {ok, Pid} = grpcbox_sup:start_link(),
    case application:get_env(grpcbox, client) of
        {ok, #{channels := Channels}} ->
            [grpcbox_channel_sup:start_child(Name, Endpoints, Options)
             || {Name, Endpoints, Options} <- Channels];
        _ ->
            ok
    end,

    ServerOpts = application:get_env(grpcbox, servers, []),
    maybe_start_server(ServerOpts),

    {ok, Pid}.

stop(_State) ->
    ok.

%%

maybe_start_server([]) ->
    ok;
maybe_start_server([ServerOpts | Tail]) ->
    grpcbox_services_simple_sup:start_child(ServerOpts),
    maybe_start_server(Tail).

-------------------------------------------------------------------
 @doc grpcbox public API
 @end
-------------------------------------------------------------------


-module(grpcbox_app).

-behaviour(application).

-export([start/2, stop/1]).

-include("grpcbox.hrl").

start(_StartType, _StartArgs) ->
    {ok, Pid} = grpcbox_sup:start_link(),
    case application:get_env(grpcbox, client) of
        {ok, #{channels := Channels}} ->
            [grpcbox_channel_sup:start_child(Name, Endpoints, Options)
             || {Name, Endpoints, Options} <- Channels];
        _ ->
            ok
    end,

    ServerOpts = application:get_env(grpcbox, servers, []),
    maybe_start_server(ServerOpts),

    {ok, Pid}.

stop(_State) ->
    ok.


maybe_start_server([]) ->
    ok;
maybe_start_server([ServerOpts | Tail]) ->
    grpcbox_services_simple_sup:start_child(ServerOpts),
    maybe_start_server(Tail).
