% Licensed under the Apache License, Version 2.0 (the "License"); you may not
% use this file except in compliance with the License. You may obtain a copy of
% the License at
%
%   http://www.apache.org/licenses/LICENSE-2.0
%
% Unless required by applicable law or agreed to in writing, software
% distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
% WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
% License for the specific language governing permissions and limitations under
% the License.

-module(couch_api).


-export([
    welcome_message/0,
    welcome_message/1
]).


-include_lib("couch/include/couch_db.hrl").


%% api

welcome_message() ->
    welcome_message(default_welcome_message()).


welcome_message(WelcomeMessage) ->
    Vendor = case config:get("vendor") of
        [] ->
            [];
        Properties ->
            [{vendor, {[{?l2b(K), ?l2b(V)} || {K, V} <- Properties]}}]
    end,
    [
        {couchdb, WelcomeMessage},
        {version, list_to_binary(couch_server:get_version())}
        | Vendor
    ].


%% internal

%% TODO: I18n
default_welcome_message() ->
    <<"Welcome">>.
