package com.palmnest.service;

import com.palmnest.application.bean.Page;
import com.palmnest.application.bean.Pagenation;
import com.palmnest.application.dto.output.ElementDto;
import com.palmnest.dao.ElementGroupDao;
import com.palmnest.model.Element;
import com.palmnest.model.ElementGroup;
import com.palmnest.model.OrgElement;
import org.hibernate.criterion.Criterion;

import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;


/**
 * 数据字典服务接口
 *
 * @author ldb
 */
public interface ElementGroupManager extends GenericManager<ElementGroup, Long> {


	void setElementGroupDao(ElementGroupDao elementGroupDao);

	ElementGroup getElementGroupId(Long id);

	Map<Long, String> getElementIds(final Collection<Long> ids);

	Element getElementId(Long id);

	ElementGroup saveElementGroup(ElementGroup elementGroup);

	Element saveElement(Element element);

	void removeElementGroups(Long... ids);

	void removeElement(Long... ids);

	public Pagenation<ElementGroup> queryElementGroup(int pageNo, List<Criterion> filterList);

	public Pagenation<Element> queryElement(int pageNo, List<Criterion> filterList);

	/**
	 * 获取某表的最大操作版本号
	 *
	 * @param tableName
	 * @return
	 */
	public long getTabMaxOptVersion(String tableName);

	public List getSyncElementDataList(long minVersion, long maxVersion);

	public List<ElementGroup> getSyncGroupDataList(long minVersion, long maxVersion);

	 List<Element> getElementsByGroupName(String code);

	 List<Element> getElementsByGroupName(String code,String orgId);
	List<ElementGroup> getAllDataList();

	//通过区域编码获取区域信息
	Map<String, Object> getOrderAreaInfo(String areaCode);

	List<ElementDto> convert(List<Element> elements);

	Element getByItemCode(String itemcode);

	/**
	 * @param groupcode 组编码
	 * @param itemcode  成员编码
	 * @return
	 */
	Element getByItemCode(String groupcode, String itemcode);

	/**
	 * @param groupcode 组编码
	 * @param itemname  成员名称
	 * @return
	 */
	Element getByItemname(String groupcode, String itemname);

	/**
	 * 获取项目常用选项配置列表
	 *
	 * @param pageNo   当前页
	 * @param pageSize 每页显示数
	 * @param map      条件参数
	 * @return
	 */
	Page orgSettingList(int pageNo, int pageSize, HashMap<String, String> map);

	/**
	 * 获取项目常用项配置详情
	 *
	 * @param orgId
	 * @param groupId
	 * @return
	 */
	List<ElementDto> getOrgElementGroupInfo(int orgId, Long groupId);

	/**
	 * 获取项目常用项配置详情
	 *
	 * @param orgId
	 * @param groupCode
	 * @return
	 */
	List<ElementDto> getOrgElementGroupInfo(int orgId, String groupCode);

	List<ElementDto> getOrgElementGroupInfoV2(String orgId, String groupCode);
	/**
	 * 保存/修改 项目配置项
	 */
	void saveUpdateOrgSetting(List<ElementDto> dtos, Integer orgId, Long groupId) throws Exception;

	/**
	 * 根据id获取项目配置
	 *
	 * @param id
	 * @return
	 */
	OrgElement getOrgElementId(Long id);

	ElementDto getElementById(Long id);

	ElementDto getByItemname(String orgId, String groupcode, String itemname);
}
