package com.lesingle.creation.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lesingle.creation.dto.role.CreateRoleDTO;
import com.lesingle.creation.dto.role.UpdateRoleDTO;
import com.lesingle.creation.entity.Role;
import com.lesingle.creation.vo.role.RoleDetailVO;
import com.lesingle.creation.vo.role.RoleListVO;

import java.util.List;

/**
 * 角色服务接口
 */
public interface RoleService extends IService<Role> {

    /**
     * 创建角色
     *
     * @param dto 创建角色 DTO
     * @param tenantId 租户 ID
     * @param operatorId 操作人 ID
     * @return 角色详情 VO
     */
    RoleDetailVO create(CreateRoleDTO dto, Long tenantId, Long operatorId);

    /**
     * 分页查询角色列表
     *
     * @param tenantId 租户 ID
     * @param page 页码
     * @param pageSize 每页大小
     * @return 角色列表分页数据
     */
    Page<RoleListVO> pageList(Long tenantId, int page, int pageSize);

    /**
     * 根据 ID 查询角色详情
     *
     * @param id 角色 ID
     * @return 角色详情 VO
     */
    RoleDetailVO detail(Long id);

    /**
     * 更新角色
     *
     * @param id 角色 ID
     * @param dto 更新角色 DTO
     * @param tenantId 租户 ID
     * @return 角色详情 VO
     */
    RoleDetailVO update(Long id, UpdateRoleDTO dto, Long tenantId);

    /**
     * 删除角色
     *
     * @param id 角色 ID
     */
    void delete(Long id);

    /**
     * 获取所有角色列表
     *
     * @param tenantId 租户 ID
     * @return 角色列表
     */
    List<RoleListVO> list(Long tenantId);
}
