package com.haha.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.haha.common.vo.Result;
import com.haha.entity.DataPermission;

import java.util.List;
import java.util.Map;

/**
 * 数据权限服务接口
 */
public interface DataPermissionService extends IService<DataPermission> {

    /**
     * 获取所有权限列表(按模块分组)
     * @return 权限列表(按模块分组)
     */
    Result<List<DataPermission>> getAllPermissions();

    /**
     * 获取所有权限(按模块分组返回)
     * @return 模块->权限列表的映射
     */
    Result<Map<String, List<DataPermission>>> getPermissionsGroupByModule();

    /**
     * 获取权限树形结构
     * @return 权限树
     */
    Result<List<Map<String, Object>>> getPermissionsTree();

    /**
     * 根据模块编码获取权限列表
     * @param moduleCode 模块编码
     * @return 权限列表
     */
    Result<List<DataPermission>> getPermissionsByModule(String moduleCode);

    /**
     * 根据角色ID获取权限列表
     * @param roleId 角色ID
     * @return 权限列表
     */
    Result<List<DataPermission>> getPermissionsByRoleId(Long roleId);

    /**
     * 根据角色ID获取权限编码列表
     * @param roleId 角色ID
     * @return 权限编码列表
     */
    Result<List<String>> getPermissionCodesByRoleId(Long roleId);

    /**
     * 根据角色ID列表获取权限编码列表
     * @param roleIds 角色ID列表
     * @return 权限编码列表
     */
    List<String> getPermissionCodesByRoleIds(List<Long> roleIds);

    /**
     * 检查权限编码是否存在
     * @param permissionCode 权限编码
     * @return 是否存在
     */
    boolean existsByPermissionCode(String permissionCode);

    /**
     * 创建权限
     * @param permission 权限信息
     * @return 创建结果
     */
    Result<Void> createPermission(DataPermission permission);

    /**
     * 更新权限
     * @param permission 权限信息
     * @return 更新结果
     */
    Result<Void> updatePermission(DataPermission permission);

    /**
     * 删除权限
     * @param id 权限ID
     * @return 删除结果
     */
    Result<Void> deletePermission(Long id);

    /**
     * 切换权限状态
     * @param id 权限ID
     * @param status 状态: 1-启用, 0-禁用
     * @return 更新结果
     */
    Result<Void> togglePermissionStatus(Long id, Integer status);
}
