package cn.nianxx.thhotel.platform.access.service;

import cn.nianxx.thhotel.platform.access.common.request.AdminRoleCreateRequest;
import cn.nianxx.thhotel.platform.access.common.request.AdminRolePermissionAssignmentRequest;
import cn.nianxx.thhotel.platform.access.common.request.AdminRoleUpdateRequest;
import cn.nianxx.thhotel.platform.access.common.result.AdminPermissionResult;
import cn.nianxx.thhotel.platform.access.common.result.AdminRoleDetailResult;
import cn.nianxx.thhotel.platform.access.common.result.AdminRoleListItemResult;
import cn.nianxx.thhotel.platform.common.result.PlatformPageResult;
import cn.nianxx.thhotel.platform.security.common.dto.AuthenticatedUserContext;
import java.util.List;

/**
 * 管理后台角色权限管理服务。第一版提供角色和权限查询。
 */
public interface AdminAccessManagementService {

    /**
     * 分页查询角色列表。
     */
    PlatformPageResult<AdminRoleListItemResult> queryRoles(
            String keyword,
            String roleStatus,
            Integer pageNum,
            Integer pageSize);

    /**
     * 查询角色详情。
     */
    AdminRoleDetailResult getRole(String roleId);

    /**
     * 查询全部权限码。
     */
    List<AdminPermissionResult> listPermissions();

    /**
     * 新增自定义角色。
     */
    AdminRoleDetailResult createRole(AdminRoleCreateRequest request, AuthenticatedUserContext actor);

    /**
     * 编辑自定义角色基础信息。
     */
    AdminRoleDetailResult updateRole(String roleId, AdminRoleUpdateRequest request, AuthenticatedUserContext actor);

    /**
     * 覆盖自定义角色权限关系。
     */
    AdminRoleDetailResult assignPermissions(
            String roleId,
            AdminRolePermissionAssignmentRequest request,
            AuthenticatedUserContext actor);
}
