package com.palmnest.service;

import com.palmnest.application.bean.Pagenation;
import com.palmnest.model.AppFunction;
import com.palmnest.model.User;
import org.hibernate.criterion.Criterion;

import java.util.List;
import java.util.Set;

/**
 * @author yb
 * @remark 系统功能业务层接口
 * @since 2014-05-28
 */
public interface AppFunctionManager {
	/**
	 * 默认分页
	 *
	 * @param pageNo     页码
	 * @param filterList 过滤集合
	 * @return
	 */
	public Pagenation<AppFunction> queryAppFunction(int pageNo, List<Criterion> filterList);

	public List<AppFunction> getAll();

	/**
	 * 根据端口获取功能列表
	 *
	 * @param port 0-PC 1-APP
	 * @return
	 */
	public List<AppFunction> getAll(Integer port);

	/**
	 * 根据端口与权限类型获取功能列表
	 *
	 * @param port      0-PC 1-APP
	 * @param rightType 0-一级 1-二级 2-按钮
	 * @return
	 */
	public List<AppFunction> getAll(Integer port, Integer rightType);

	/**
	 * 根据角色id获取功能列表
	 *
	 * @param roleId
	 * @return
	 */
	public List<AppFunction> getFunctionListByRole(Long roleId, String isApp);

	/**
	 * 根据用户角色获取功能列表
	 *
	 * @param roleIdSet 用户角色列表
	 * @return
	 */
	public List<AppFunction> getFunctionListByRole(Set<Long> roleIdSet);

	/**
	 * 系统功能查询
	 *
	 * @param id 功能id
	 * @return
	 */
	public AppFunction getById(int id);

	/**
	 * 保存
	 *
	 * @param appFunction
	 */
	public void saveObj(AppFunction appFunction);

	public void updateObj(AppFunction appFunction);

	public User getUserById(long userid);

	public void remove(AppFunction obj);

	public AppFunction getFuctionBySysCode(String id, String sysCode);

	public AppFunction getFuctionByPerms(String id, String perms);

	/**
	 * 根据父级功能id和角色id查询该角色所拥有的三级功能权限集合
	 *
	 * @param parentFuncId 父级功能id
	 * @param roleId       角色id
	 * @return
	 */
	public List<AppFunction> getLevel3Function(Integer parentFuncId, Long roleId);

	//----------------------------------
	public void sortFunc(String funcId);
	//----------------------------------
}
