%% Copyright (C) 2024 by sysmocom - s.f.m.c. GmbH <info@sysmocom.de>
%% Author: Vadim Yanitskiy <vyanitskiy@sysmocom.de>
%%
%% All Rights Reserved
%%
%% SPDX-License-Identifier: AGPL-3.0-or-later
%%
%% This program is free software; you can redistribute it and/or modify
%% it under the terms of the GNU Affero General Public License as
%% published by the Free Software Foundation; either version 3 of the
%% License, or (at your option) any later version.
%%
%% This program is distributed in the hope that it will be useful,
%% but WITHOUT ANY WARRANTY; without even the implied warranty of
%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
%% GNU General Public License for more details.
%%
%% You should have received a copy of the GNU Affero General Public License
%% along with this program.  If not, see <https://www.gnu.org/licenses/>.
%%
%% Additional Permission under GNU AGPL version 3 section 7:
%%
%% If you modify this Program, or any covered work, by linking or
%% combining it with runtime libraries of Erlang/OTP as released by
%% Ericsson on https://www.erlang.org (or a modified version of these
%% libraries), containing parts covered by the terms of the Erlang Public
%% License (https://www.erlang.org/EPLICENSE), the licensors of this
%% Program grant you additional permission to convey the resulting work
%% without the need to license the runtime libraries of Erlang/OTP under
%% the GNU Affero General Public License. Corresponding Source for a
%% non-source form of such a combination shall include the source code
%% for the parts of the runtime libraries of Erlang/OTP used as well as
%% that of the covered work.

-module(osmo_s1gw).

-export([get_env/2,
         set_env/2,
         get_priv/1,
         set_log_prefix/1,
         main/1]).

-define(ENV_APP_NAME, osmo_s1gw).


%% ------------------------------------------------------------------
%% public API
%% ------------------------------------------------------------------

-spec get_env(Param, Default) -> Value
    when Param :: atom(),
         Default :: term(),
         Value :: term().
get_env(Param, Default) ->
    application:get_env(?ENV_APP_NAME, Param, Default).


-spec set_env(Param, Value) -> ok
    when Param :: atom(),
         Value :: term().
set_env(Param, Value) ->
    application:set_env(?ENV_APP_NAME, Param, Value).


-spec get_priv(Name) -> Path
    when Name :: file:filename_all(),
         Path :: file:filename_all().
get_priv(Name) ->
    PrivDir = code:priv_dir(?ENV_APP_NAME),
    filename:join(PrivDir, Name).


%% Set logging prefix for the calling process
-spec set_log_prefix(string()) -> ok.
set_log_prefix(Prefix) when is_list(Prefix) ->
    logger:set_process_metadata(#{prefix => Prefix}).


main(_Args) ->
    application:ensure_all_started(?MODULE),
    timer:sleep(infinity).

%% vim:set ts=4 sw=4 et:
