% 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.

{application, couch, [
    {description, "Apache CouchDB"},
    {vsn, git},
    {registered, [
        couch_db_update,
        couch_db_update_notifier_sup,
        couch_httpd,
        couch_primary_services,
        couch_proc_manager,
        couch_secondary_services,
        couch_server,
        couch_sup,
        couch_task_status
    ]},
    {mod, {couch_app, []}},
    {applications, [
        % stdlib
        kernel,
        stdlib,
        crypto,
        sasl,
        inets,
        ssl,

        % Upstream deps
        ibrowse,
        mochiweb,

        % ASF deps
        couch_epi,
        exxhash,
        config,
        b64url,
        couch_log,
        couch_event,
        ioq,
        couch_stats,
        hyper,
        couch_dist
    ]},
    {env, [
        {httpd_global_handlers, [
            {"/", "{couch_httpd_misc_handlers, handle_welcome_req, <<\"Welcome\">>}"},
            {"favicon.ico", "{couch_httpd_misc_handlers, handle_favicon_req, \"{{prefix}}/share/www\"}"},
            {"_utils", "{couch_httpd_misc_handlers, handle_utils_dir_req, \"{{prefix}}/share/www\"}"},
            {"_all_dbs", "{couch_httpd_misc_handlers, handle_all_dbs_req}"},
            {"_active_tasks", "{couch_httpd_misc_handlers, handle_task_status_req}"},
            {"_config", "{couch_httpd_misc_handlers, handle_config_req}"},
            {"_replicate", "{couch_replicator_httpd, handle_req}"},
            {"_uuids", "{couch_httpd_misc_handlers, handle_uuids_req}"},
            {"_stats", "{couch_stats_httpd, handle_stats_req}"},
            {"_session", "{couch_httpd_auth, handle_session_req}"}
        ]},
        {httpd_db_handlers, [
            {"_all_docs", "{couch_mrview_http, handle_all_docs_req}"},
            {"_local_docs", "{couch_mrview_http, handle_local_docs_req}"},
            {"_design_docs", "{couch_mrview_http, handle_design_docs_req}"},
            {"_changes", "{couch_httpd_db, handle_db_changes_req}"},
            {"_compact", "{couch_httpd_db, handle_compact_req}"},
            {"_design", "{couch_httpd_db, handle_design_req}"},
            {"_temp_view", "{couch_mrview_http, handle_temp_view_req}"},
            {"_view_cleanup", "{couch_mrview_http, handle_cleanup_req}"}
        ]},
        {httpd_design_handlers, [
            {"_compact", "{couch_mrview_http, handle_compact_req}"},
            {"_info", "{couch_mrview_http, handle_info_req}"},
            {"_list", "{couch_mrview_show, handle_view_list_req}"},
            {"_rewrite", "{couch_httpd_rewrite, handle_rewrite_req}"},
            {"_show", "{couch_mrview_show, handle_doc_show_req}"},
            {"_update", "{couch_mrview_show, handle_doc_update_req}"},
            {"_view", "{couch_mrview_http, handle_view_req}"}
        ]}
    ]}
]}.
