package com.hotent.portal.persistence.manager;

import java.io.IOException;
import java.util.List;
import java.util.Map;
import java.util.Optional;

import com.hotent.base.manager.BaseManager;
import com.hotent.base.model.CommonResult;
import com.hotent.base.query.PageList;
import com.hotent.base.query.QueryFilter;
import com.hotent.portal.model.SysIndexColumn;
import com.hotent.portal.model.SysIndexLayoutManage;
import com.hotent.portal.params.IndexLayoutVo;
import org.springframework.web.multipart.MultipartHttpServletRequest;


/**
 * 布局管理  Service类
 *
 * @company 广州宏天软件股份有限公司
 * @author maoww
 * @email maoww@jee-soft.cn
 * @date 2018年6月11日
 */
public interface SysIndexLayoutManageManager extends BaseManager<SysIndexLayoutManage>{
	/**
	 * 检查当前用户对传入的 alias 是否有权限
	 * @param alias  String 别名
	 * @return String 有权限则返回原对象，无权限返回null
	 */
	String checkLayoutAuth(String  alias);

	/**
	 * 获取默认的设计模版
	 * @return
	 */
	public String getDefaultDesignHtml();

	/**
	 * 获取布局管理集合
	 * @param filter 通用查询器
	 * @return
	 */
//	public List<SysIndexLayoutManage> getList(QueryFilter filter);

	/**
	 * 获得布局实体
	 * @param userId 用户id
	 * @param columnList 首页栏目集合
	 * @param type   类型
	 * @return
	 */
	public SysIndexLayoutManage getLayoutList(String userId, List<SysIndexColumn>  columnList, Short type);

	/**
	 * 找自己拥有权限的管理布局
	 * @return
	 */
	public String getMyHasRightsLayout();

	/**
	 * 找自己所属子组织没权限但设置默认布局
	 * @return
	 */
//	public String getHasRightsLayout();

	/**
	 * 系统管理员的默认布局
	 * @return
	 */
	public String getManagerLayout();

	/**
	 * 获取主页管理数据
	 * @param layoutId
	 * @return
	 */
	public String obtainIndexManageData(String layoutId);

	/**
	 * 通过orgid和layoutType获取已启用的布局
	 * @param orgId
	 * @param layoutType
	 * @return
	 */
	public SysIndexLayoutManage getEnableByOrgIdAndType(String orgId,Short layoutType);

	/**
	 * 判断布局名称是否重复
	 * @param name 布局名称
	 * @return
	 */
	public Boolean isExistName(String name);

	/**
	 * 通过组织和布局类型获取实体
	 * @param orgId 组织id
	 * @param layoutType 布局类型
	 * @return
	 */
	public List<SysIndexLayoutManage> getByOrgIdAndLayoutType(String orgId, Short layoutType);

	/**
	 * 取消所有默认当前布局类型
	 * @param orgId 	   组织id
	 * @param layoutType 布局类型
	 */
	public void cancelOrgIsDef(String orgId, Short layoutType);

	/**
	 * 获取手机的首页布局
	 * @param userId 用户id
	 * @return
	 */
	public String obtainIndexManageMobileData(String layoutId);

	/**
	 * 获取pc端布局
	 * @param valueOf 值
	 * @param typePc pc端
	 * @return
	 */
	public SysIndexLayoutManage getByIdAndType(String id, Short type);

	/**
	 * 手机的布局
	 * @return
	 */
	public String getMobileManagerLayout();

	/**
	 * 通过指定组织ID和布局类型获取布局
	 * @param string
	 * @param layoutType
	 * @return
	 */
	public SysIndexLayoutManage getSharedByOrgIdAndType(String orgId,Short layoutType);

	/**
	 * 通过指定组织ID数组和布局类型获取布局
	 * @param orgIds
	 * @param layoutType
	 * @return
	 */
	SysIndexLayoutManage getSharedByOrgIds(List<String> orgIds, Short layoutType);

	public void setEnable(String id, Short enable);

	public void setAsTemplate(String id, Short asTemplate);

	SysIndexLayoutManage getDefaultLayoutManageByLayoutType(String layoutType);

    String exportDefaultLayout(List<String> ids, boolean isDefault) throws Exception;

	public void importFile(String fileJson, String orgId, boolean isDefault) throws IOException;
	/**
	 * 根据别名获取
	 * @param alias
	 * @return
	 */
	List<SysIndexLayoutManage> getByAlias(String alias);

	/**
	 * 缓存用户设置的门户布局
	 * @param userId
	 * @param layoutType
	 * @param layoutId
	 */
	String cacheUserLayout(String layoutId,String layoutType,String type,String userId);

	/**
	 * 获取门户设置缓存
	 * @param layoutId
	 * @param layoutType
	 * @param userId
	 */
	String getCacheUserLayout(String layoutType,String userId);

	/**
	 * 清除门户设置缓存
	 * @param layoutId
	 * @param layoutType
	 * @param userId
	 */
	void removeCacheUserLayout(String layoutType,String userId);

	/**
	 * 管理端的布局
	 * @return
	 * @throws Exception
	 */
	CommonResult<IndexLayoutVo> myHome() throws Exception;

	/**
	 * 应用端的布局
	 * @return
	 * @throws Exception
	 */
	CommonResult<IndexLayoutVo> myVueFrontHome() throws Exception;

	/**
	 * 手机端的布局
	 * @return
	 * @throws Exception
	 */
	CommonResult<IndexLayoutVo> myMobileHome() throws Exception;

	/**
	 * 取得布局管理分页列表
	 * @param queryFilter
	 * @return
	 */
    PageList<SysIndexLayoutManage> listJson(QueryFilter<SysIndexLayoutManage> queryFilter);

	/**
	 * 根据别名获取
	 * @param alias
	 * @return
	 */
	List<SysIndexLayoutManage> getDataByAlias(List<String> alias,Boolean isAdmin);

	SysIndexLayoutManage getDataByAlias(String alias,Boolean isAdmin);

	CommonResult<String> delete(String ids);

	Map<String, Object> design(String id, short layoutType) throws Exception;

	/**
	 * 保存首页布局
	 * @param indexLayout
	 * @return
	 */
	CommonResult<String> saveLayout(SysIndexLayoutManage indexLayout);

	CommonResult<String> importDefaultLayout(String cacheFileId,String orgId,boolean isDefault) throws IOException;

	/**
	 * 复制布局信息
	 * @param layout
	 * @return
	 */
	CommonResult saveCopy(SysIndexLayoutManage layout);

	/**
	 * 获取当前用户有权限门户(包含系统默认门户)
	 * @param from
	 * @return
	 */
	List<IndexLayoutVo> getCurrentAuthLayout(Optional<String> from);

	/**
	 * 导入大屏
	 * @param request
	 * @param orgId
	 * @param isDefault
	 * @return
	 */
	CommonResult<String> importDatav(MultipartHttpServletRequest request, String orgId, boolean isDefault);

	/**
	 * 导入大屏
	 * @param unZipFilePath
	 * @param status
	 * @return
	 */
	CommonResult<String> confirmImportData(String unZipFilePath, String status);

	String putImportFileInCache(String fileId, String fileStr);

	String getImportFileFromCache(String fileId);

	void delImportFileFromCache(String fileId);

	CommonResult<String> importDefaultLayoutCheck(MultipartHttpServletRequest request, String orgId, boolean isDefault);


}
