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

import com.gic.api.base.commons.Page;
import com.gic.api.base.commons.ServiceResponse;
import com.gic.haoban.base.api.common.BasePageInfo;
import com.gic.haoban.manage.api.dto.StaffClerkBindLogDetailDTO;
import com.gic.haoban.manage.api.dto.StaffClerkInfoDTO;
import com.gic.haoban.manage.api.dto.StaffClerkRelationDTO;

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

public interface StaffClerkRelationApiService {
    /**
     * 绑定日志
     *
     * @param params
     */
    void bindLogMq(String params);

    /**
     *
     * @param wxEnterpriseId
     * @param enterpriseId
     * @param clerkCodeList 改为传导购idList
     * @return
     */
    List<StaffClerkRelationDTO> listBindCode(String wxEnterpriseId,String enterpriseId, Set<String> clerkCodeList);

    List<StaffClerkRelationDTO> listBindCodeByStaffId(List<String> enterpriseIdList, String staffId);

    /**
     * 根据staffid 获取列表
     *
     * @param staffId
     * @return
     */
    List<StaffClerkInfoDTO> listBindDetailByStaffId(String staffId);

    /**
     * 绑定
     *
     * @return
     */
    ServiceResponse bindStaffClerk(StaffClerkRelationDTO staffClerkRelationDTO, String optStaffId, int channelCode);

    /**
     * 小程序-审核绑定
     *
     * @param staffClerkRelation
     * @param optStaffId
     * @param channelCode
     */
    ServiceResponse wxBindStaffClerk(StaffClerkRelationDTO staffClerkRelation, String optStaffId, int channelCode);


    StaffClerkRelationDTO getByCodeAndEnterpriseId(String clerkCode, String enterpriseId);

    /**
     * 解绑导购
     * @param staffId
     * @param clerkId
     * @param channelCode
     * @return
     */
    boolean unbindByStaffAndClerkId(String staffId, String clerkId, int channelCode,String wxEnterpriseId);

    /**
     * 解绑门店
     * @param wxEnterpriseId
     * @param storeId
     * @param staffId
     * @param channelCode
     */
    //无效接口
//    void delBindByStoreId(String wxEnterpriseId,String storeId, String staffId,int channelCode);


    StaffClerkRelationDTO getOneByClerkId(String clerkId);

    List<StaffClerkRelationDTO> listByClerkIds(List<String> clerkIds);

    List<StaffClerkRelationDTO> listByClerkIdsWxEnterpriseId(List<String> clerkIds, String wxEnterpriseId);

    /**
     * 导购列表
     *
     * @param storeId
     * @return
     */
    List<StaffClerkRelationDTO> listByStoreId(String storeId);
    
    List<StaffClerkRelationDTO> listByStoreIds(String wxEnterpriseId, List<String> storeIds) ;

    /**
     * 查询导购信息
     * @param storeId
     * @param staffId
     * @return
     */
    StaffClerkRelationDTO getOneByStoreIdAndStaffId(String storeId, String staffId);

    /**
     * 查询导购信息
     *
     * @param clerkId
     * @return
     */
    StaffClerkRelationDTO getByClerkId(String clerkId);

    StaffClerkRelationDTO getByClerkIdForWxUserId(String clerkId);

    /**
     * @param enterpriseId
     * @param staffid
     * @return
     */
    List<StaffClerkRelationDTO> listByEnterpriseIdAndStaffid(String enterpriseId, String staffid);

    /**
     * 搜索查询列表
     *
     * @param wxEnterpriseId
     * @param search
     * @param enterpriseId
     * @param optType
     * @return
     */
    Page<StaffClerkBindLogDetailDTO> pageStaffClerkBindLog(String wxEnterpriseId, String search, String enterpriseId, int optType, BasePageInfo pageInfo);

    /**
     * 搜索解绑列表
     *
     * @param wxEnterpriseId
     * @param clerkId
     * @param enterpriseId
     * @param pageInfo
     * @return
     */
    Page<StaffClerkBindLogDetailDTO> pageStaffClerkUnBindLog(String wxEnterpriseId, String clerkId, String enterpriseId, int optType, BasePageInfo pageInfo);

    /**
     * 追加到绑定日志
     *
     * @param staffId
     * @param optStaffId
     * @param optType
     * @param channelCode
     * @param relationId
     */
    void pushToBindLog(String staffId, String optStaffId, int optType, int channelCode, String relationId);


    /**
     * 获取config（联系我）
     *
     * @param clerkId
     * @return
     */
    com.gic.haoban.base.api.common.ServiceResponse<String> getClerkMemberChatConfig(String clerkId);

    /**
     * @return 返回值类型: <pre>
     * @author 作者: WQ <pre>
     * @date 时间: 2020年12月24日 上午11:21:38 <pre>
     * @param wxEnterpriseId: <pre>
     * @param pageInfo: <pre>
     * @Description 方法描述:
     */
    Page<StaffClerkRelationDTO> pageByWxEnterpriseId(String wxEnterpriseId, BasePageInfo pageInfo);

    /**
     * 通过员工id列表
     *
     * @param wxEnterpriseId wx企业标识
     * @param staffId        员工id
     * @return {@link List }<{@link StaffClerkRelationDTO }>
     * @author mozhu
     * @date 2022-06-20 22:46:46
     */
    List<StaffClerkRelationDTO> listByStaffId(String wxEnterpriseId, String staffId);

    /**
     * 导购门店转移或者删除
     * clerkStoreMoveDelMq
     *
     * @param param 参数
     * @author mozhu
     * @date 2022-07-12 18:57:15
     */
    void clerkStoreMoveDel(String param);

    /**
     * @param enterpriseId
     * @param wxEnterpriseId
     * @return
     * @throws
     * @Title: getCanAddHmCount
     * @Description: 获取能创建活码的导购数量
     * @author xugh
     */
    int getCanAddHmCount(String enterpriseId, String wxEnterpriseId, String clerkId);

    List<String> listStaffIdByWxEnterpriseId(String wxEnterpriseId);


    /**
     * 获取区经绑定
     *
     * @param staffId 员工id
     * @return {@link List}<{@link StaffClerkInfoDTO}>
     */
    List<StaffClerkRelationDTO> listManageBindByStaffId(String staffId);

    /**
     * 查询离职成员的关联的导购记录
     * @param staffIdList
     * @return
     */
    List<String> getTakeoverClerkIdList(List<String> staffIdList) ;


    List<String> listAllClerkIdsByEnterpriseId(String enterpriseId);

    List<String> listAlStoreIdsByEnterpriseId(String enterpriseId);

    /**
     * 画布查询关联好办的的导购
     * @param wxEnterpriseId
     * @param enterpriseId
     * @param creatorId
     * @param storeFilterId
     * @return
     */
    ServiceResponse<Map<String,List<String>>> listClerkForCanvas(String wxEnterpriseId , String enterpriseId , String creatorId , String storeFilterId) ;

}
