# Copyright (C) 2016-2024 RhodeCode GmbH
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Affero General Public License, version 3
# (only), as published by the Free Software Foundation.
#
# 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 <http://www.gnu.org/licenses/>.
#
# This program is dual-licensed. If you wish to learn more about the
# RhodeCode Enterprise Edition, including its added features, Support services,
# and proprietary license terms, please see https://rhodecode.com/licenses/

from rhodecode.apps._base import ADMIN_PREFIX


def admin_routes(config):
    """
    User groups /_admin prefixed routes
    """
    from rhodecode.apps.user_group.views import UserGroupsView

    config.add_route(
        name="user_group_members_data", pattern=r"/user_groups/{user_group_id:\d+}/members", user_group_route=True
    )
    config.add_view(
        UserGroupsView,
        attr="user_group_members",
        route_name="user_group_members_data",
        request_method="GET",
        renderer="json_ext",
        xhr=True,
    )

    # user groups perms
    config.add_route(
        name="edit_user_group_perms_summary",
        pattern=r"/user_groups/{user_group_id:\d+}/edit/permissions_summary",
        user_group_route=True,
    )
    config.add_view(
        UserGroupsView,
        attr="user_group_perms_summary",
        route_name="edit_user_group_perms_summary",
        request_method="GET",
        renderer="rhodecode:templates/admin/user_groups/user_group_edit.mako",
    )

    config.add_route(
        name="edit_user_group_perms_summary_json",
        pattern=r"/user_groups/{user_group_id:\d+}/edit/permissions_summary/json",
        user_group_route=True,
    )
    config.add_view(
        UserGroupsView,
        attr="user_group_perms_summary_json",
        route_name="edit_user_group_perms_summary_json",
        request_method="GET",
        renderer="json_ext",
    )

    # user groups edit
    config.add_route(name="edit_user_group", pattern=r"/user_groups/{user_group_id:\d+}/edit", user_group_route=True)
    config.add_view(
        UserGroupsView,
        attr="user_group_edit",
        route_name="edit_user_group",
        request_method="GET",
        renderer="rhodecode:templates/admin/user_groups/user_group_edit.mako",
    )

    # user groups update
    config.add_route(
        name="user_groups_update", pattern=r"/user_groups/{user_group_id:\d+}/update", user_group_route=True
    )
    config.add_view(
        UserGroupsView,
        attr="user_group_update",
        route_name="user_groups_update",
        request_method="POST",
        renderer="rhodecode:templates/admin/user_groups/user_group_edit.mako",
    )

    config.add_route(
        name="edit_user_group_global_perms",
        pattern=r"/user_groups/{user_group_id:\d+}/edit/global_permissions",
        user_group_route=True,
    )
    config.add_view(
        UserGroupsView,
        attr="user_group_global_perms_edit",
        route_name="edit_user_group_global_perms",
        request_method="GET",
        renderer="rhodecode:templates/admin/user_groups/user_group_edit.mako",
    )

    config.add_route(
        name="edit_user_group_global_perms_update",
        pattern=r"/user_groups/{user_group_id:\d+}/edit/global_permissions/update",
        user_group_route=True,
    )
    config.add_view(
        UserGroupsView,
        attr="user_group_global_perms_update",
        route_name="edit_user_group_global_perms_update",
        request_method="POST",
        renderer="rhodecode:templates/admin/user_groups/user_group_edit.mako",
    )

    config.add_route(
        name="edit_user_group_perms",
        pattern=r"/user_groups/{user_group_id:\d+}/edit/permissions",
        user_group_route=True,
    )
    config.add_view(
        UserGroupsView,
        attr="user_group_edit_perms",
        route_name="edit_user_group_perms",
        request_method="GET",
        renderer="rhodecode:templates/admin/user_groups/user_group_edit.mako",
    )

    config.add_route(
        name="edit_user_group_perms_update",
        pattern=r"/user_groups/{user_group_id:\d+}/edit/permissions/update",
        user_group_route=True,
    )
    config.add_view(
        UserGroupsView,
        attr="user_group_update_perms",
        route_name="edit_user_group_perms_update",
        request_method="POST",
        renderer="rhodecode:templates/admin/user_groups/user_group_edit.mako",
    )

    config.add_route(
        name="edit_user_group_advanced",
        pattern=r"/user_groups/{user_group_id:\d+}/edit/advanced",
        user_group_route=True,
    )
    config.add_view(
        UserGroupsView,
        attr="user_group_edit_advanced",
        route_name="edit_user_group_advanced",
        request_method="GET",
        renderer="rhodecode:templates/admin/user_groups/user_group_edit.mako",
    )

    config.add_route(
        name="edit_user_group_advanced_sync",
        pattern=r"/user_groups/{user_group_id:\d+}/edit/advanced/sync",
        user_group_route=True,
    )
    config.add_view(
        UserGroupsView,
        attr="user_group_edit_advanced_set_synchronization",
        route_name="edit_user_group_advanced_sync",
        request_method="POST",
        renderer="rhodecode:templates/admin/user_groups/user_group_edit.mako",
    )

    # user groups delete
    config.add_route(
        name="user_groups_delete", pattern=r"/user_groups/{user_group_id:\d+}/delete", user_group_route=True
    )
    config.add_view(
        UserGroupsView,
        attr="user_group_delete",
        route_name="user_groups_delete",
        request_method="POST",
        renderer="rhodecode:templates/admin/user_groups/user_group_edit.mako",
    )


def includeme(config):
    # main admin routes
    config.include(admin_routes, route_prefix=ADMIN_PREFIX)
