package com.gic.haoban.manage.api.service;

import com.gic.api.base.commons.Page;
import com.gic.haoban.base.api.common.BasePageInfo;
import com.gic.haoban.base.api.common.ServiceResponse;
import com.gic.haoban.manage.api.dto.DepartmentDTO;
import com.gic.haoban.manage.api.dto.DepartmentShortDTO;

import java.util.List;

public interface DepartmentApiService {
	/**
	 * 部门列表-父列表
	 * @param parentId
	 * @return
	 */
	List<DepartmentDTO> listByParentId(String parentId);

	/**
	 * 查门店/部门列表
	 * @param departmentIds
	 * @param storeFlag
	 * @return
	 */
	List<DepartmentDTO> listByDepartmentIds(List<String> departmentIds,Integer storeFlag);
	/**
	 * 查门店列表
	 * @param relatedIds
	 * @return
	 */
	List<DepartmentDTO> listByRelatedIds(List<String> relatedIds);
	/**
	 * 查wxEnterprise下所有门店
	 * @param wxEnterpriseId
	 * @return
	 */
	//无效接口
//	List<DepartmentDTO> listStoreByWxEnterpriseId(String wxEnterpriseId);
	
	/**
	 * 查wxEnterprise下所有门店(溢出门店)
	 * @param wxEnterpriseId
	 * @return
	 */
	Page<DepartmentDTO> pageFullStoreByWxEnterpriseId(String wxEnterpriseId, String search,List<String> storeId,int count,BasePageInfo pageInfo);
	/**
	 * 根据部门id查询部门
	 * @param departmentId
	 * @return
	 */
	DepartmentDTO selectById(String departmentId);
	/**
	 * 根据关联id 获取部门
	 * @param departId
	 * @return
	 */
	DepartmentDTO selectByRelatedId(String departId);
	
	/**
	 * 根据参数查询
	 * @param pageInfo
	 * @param wxEnterpriseId
	 * @param keyword
	 * @param storeFlag
	 * @param recycleFlag
	 * @return
	 */
	Page<DepartmentDTO> pageDepartmentByParams(BasePageInfo pageInfo, String wxEnterpriseId, String keyword,
			Integer storeFlag, Integer recycleFlag);

	/**
	 * 获取根节点
	 * @param wxEnterpriseId
	 * @return
	 */
	DepartmentDTO getRootByEnterpriseId(String wxEnterpriseId);
	/**
	 * gic同步
	 * @param fieldListString
	 */
	@Deprecated
	void syncGicStore(String fieldListString);
	/**
	 * gic同步部门
	 * @param fieldListString
	 */
	@Deprecated
	void syncGicDepartment(String fieldListString);
	/**
	 * 分页查询
	 * @param parentId
	 * @param pageInfo
	 * @return
	 */
	Page<DepartmentDTO> pageByParentId(String parentId,String keyword, BasePageInfo pageInfo);
	/**
	 * 根据链查询子部门和自己
	 * @param chainId
	 * @return
	 */
	List<DepartmentDTO> listByChainId(String chainId,String wxEnterpriseId);


	void initwxDepartment(String corpid, String contactSecret, String wxEnterpriseId);
	/**
	 * 回收站的数量
	 * @param wxEnterpriseId
	 * @return
	 */
	Integer departmentRecycleCount(String wxEnterpriseId);
	/**
	 * 微信回调删除部门
	 * @param departmentId
	 * @return
	 */
	ServiceResponse wxCallBackDel(String departmentId);
	/**
	 * 微信回调放回收站
	 * @param departmentId
	 * @return
	 */
	ServiceResponse wxCallBackrecycle(String departmentId);
	/**
	 * 判断节点下面有没有子节点
	 * @param departmentId
	 * @return
	 */
	boolean hasSonNode(String departmentId);
	/**
	 * gic回调删除部门
	 * @param departmentId
	 */
	ServiceResponse gicDel(String departmentId);

    /**
     * 查门店/部门列表
     *
     * @param
     * @return
     */
	//无效接口
//    ServiceResponse<List<DepartmentDTO>> listStoreListByStaffId(String wxUserId);
//
//
//	boolean isInitLocked(String wxEnterpriseId);
	
	void syncWxDepartmentByParentMQ(String res);
	/**
	 * 统计门店总数
	 * @param wxEnterpriseId
	 * @return
	 */
	Integer totalStoreCountByEnterpriseId(String wxEnterpriseId);

	/**
	 * 部门排序列表（子部门）
	 * @param departmentIdSet
	 * @param wxEnterpriseId
	 * @return
	 */
	List<DepartmentDTO> listSonByDepartmentIds(List<String> departmentIdSet, String wxEnterpriseId);

	/**
	 * 搜索
	 * @param search
	 * @param wxEnterpriseId
	 * @return
	 */
	List<DepartmentShortDTO> searchDepartment(String search, String wxEnterpriseId);

	/**
	 * 获取所有部门
	 * @param wxEnterpriseId
	 * @return
	 */
	List<DepartmentShortDTO> listAllDepartment(String wxEnterpriseId);

	/**
	 * 获取子部门ids
	 *
	 * @param departmentId   部门id设置
	 * @param wxEnterpriseId wx企业标识
	 * @return {@link List }<{@link String }>
	 * @author mozhu
	 * @date 2022-05-24 17:45:57
	 */
	List<String> listSonDeptIdsByDepartmentId(String departmentId, String wxEnterpriseId);

}
