package com.palmnest.service;

import com.palmnest.application.bean.Pagenation;
import com.palmnest.model.Role;
import com.palmnest.model.RoleFunction;
import org.hibernate.criterion.Criterion;

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

/**
 * Business Service Interface to handle communication between web and
 * persistence layer.
 *
 * @author <a href="mailto:chasel.java@gmail.com">Chasel Li</a>
 * @author modify by yb 2014-05-30
 */
@SuppressWarnings("rawtypes")
public interface RoleManager extends GenericManager<Role, Long> {
	/**
	 * {@inheritDoc}
	 */

	List getRoles(Role role);

	/**
	 * {@inheritDoc}
	 */
	Role getRole(String rolename);

	/**
	 * {@inheritDoc}
	 */
	Role saveRole(Role role);

	/**
	 * {@inheritDoc}
	 */
	void removeRole(String rolename);

	/**
	 * 角色列表分页查询
	 *
	 * @param pageNo     当前页数
	 * @param filterList 过来集合
	 * @return
	 */
	public Pagenation<Role> queryRole(int pageNo, List<Criterion> filterList);

	/**
	 * @param pageNo 当前页数
	 * @return
	 */
	public Pagenation<Role> queryRole(int pageNo, int pageSize, Map<String, String> criteria);

	/**
	 * 查询当前角色的功能权限
	 *
	 * @param role
	 * @return
	 */
	public List<RoleFunction> queryRoleFunctionSet(Role role);

	/**
	 * 保存
	 *
	 * @param role
	 */
	public void saveObj(Role role);

	/**
	 * 更新
	 *
	 * @param role
	 */
	public void updateObj(Role role);

	/**
	 * 保存角色-功能关联实体
	 *
	 * @param model
	 */
	public void saveRoleFunction(RoleFunction model);

	/**
	 * 根据角色id,删除角色关联的功能
	 *
	 * @param roleid
	 */
	public void deleteRoleFunctions(long roleid);

	/**
	 * 获取可用的角色集合
	 *
	 * @return List<Role>
	 */
	public List<Role> getRoleList();

	/**
	 * 根据项目获取角色集合
	 *
	 * @return List<Role>
	 */
	public List<Role> getRoleListByOrg(String orgStr);

	public List<Role> getRoleListBySysCode(String id, String code);

	/**
	 * 通过项目查找角色 如果传角色类型则查询对应项目下的指定角色
	 *
	 * @param orgId
	 * @param roleType
	 * @return
	 */
	public List<Role> getByOrg(Integer orgId, Integer roleType);

	public void deleteRoleFunction(Long roleId, Integer functionId);

	/**
	 * 根据功能编码获取角色列表
	 *
	 * @param syscode
	 * @return
	 */
	List<Map<String, Object>> getRoleListByFuncCode(String syscode, String userId);

	Role getVirAccountRole();

	/**
	 * 根据sysCode和orgId获取角色集合
	 *
	 * @param OrgId
	 * @return
	 */
	List<Map<String, Object>> getRoleByOrgAndSysCode(Integer OrgId,Integer pageType);
}
