% 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_external_manager,
        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,
        os_mon,

        % Upstream deps
        ibrowse,
        mochiweb,

        % ASF deps
        couch_epi,
        b64url,
        couch_log,
        couch_event,
        ioq,
        couch_stats,
        hyper
    ]},
    {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}"},
            {"_plugins", "{couch_plugins_httpd, handle_req}"},
            {"_system", "{chttpd_misc, handle_system_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}"},
            {"_view_changes", "{couch_mrview_http, handle_view_changes_req}"}
        ]}
    ]}
]}.
