package com.cool.store.service;

import com.cool.store.dto.UserDTO;
import com.cool.store.entity.EnterpriseUserDO;
import com.cool.store.entity.UserAuthMappingDO;
import com.cool.store.enums.UserRoleEnum;
import com.cool.store.request.SysRoleRequest;
import com.github.pagehelper.PageInfo;

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

/**
 * describe:
 *
 * @author wxp
 * @date 2020/11/11
 */
public interface UserAuthMappingService {

    /**
     * 获取用户权限
     *
     * @param userId
     * @return
     */
    List<UserAuthMappingDO> listUserAuthMappingByUserId(String userId);

    /**
     * 获取用户授权的所有区域id
     *
     * @param userId
     * @return
     */
    List<String> getAuthRegionIdAndSubRegionIdByUserId(String userId);

    List<String> getAuthRegionIdAndSubRegionIdExcludeStoreByUserId(String userId);

    /**
     * 获取所有管辖下的区域ID 不包含门店
     * @param userId
     * @param queryInvestBigRegion 是否只查询招商所属大区 进一步过滤无关区域 因为新增铺位或者新增线索只能选择招商大区
     * @return
     */
    List<String> getAuthRegionIdByUserId(String userId,Boolean queryInvestBigRegion);

    /**
     * 获取用户授权的所有门店id
     *
     * @param userId
     * @return
     */
    List<String> getAuthStoreIdAndSubRegionIdByUserId(String userId);

    /**
     * 提供 根据职位 意向区域  查  对应人的接口  同时返回人名字
     *
     * @param userRoleEnum
     * @param wantShopAreaId
     * @return
     */
    EnterpriseUserDO getUserByRoleEnumAndWantShopAreaId(UserRoleEnum userRoleEnum, Long wantShopAreaId);

    /**
     * 获取有区域权限和职位 的人
     *
     * @param userRoleEnum
     * @param regionId
     * @return
     */
    EnterpriseUserDO getUserByRoleEnumAndRegionId(UserRoleEnum userRoleEnum, Long regionId);

    List<EnterpriseUserDO> getAllUserByRoleEnumAndRegionId(UserRoleEnum userRoleEnum, Long regionId);

    /**
     * 获取有区域权限和职位的人
     * @param userRoleEnumList
     * @param regionId
     * @return
     */
    List<EnterpriseUserDO> getUserIdByRoleEnumAndRegionId(List<UserRoleEnum> userRoleEnumList, Long regionId);

    /**
     * 获取有区域权限和职位 所有人
     *
     * @param userRoleEnum
     * @param regionId
     * @return
     */
    List<EnterpriseUserDO> getUserByRoleEnumAndRegionIdList(UserRoleEnum userRoleEnum, Long regionId);

    /**
     * 跟进角色和战区获取用户id
     *
     * @param roleIds
     * @param regionId
     * @return
     */
    Map<String, List<String>> getUserIdByRoleIdAndRegionId(List<String> roleIds, Long regionId);

    /**
     * 根据 人  查 这个人管辖区域  对应的意向区域省市code   团队线索
     *
     * @param userId
     * @return
     */
    List<Long> listWantShopAreaIdByUserId(String userId);

    /**
     * 【铺位1】所属战区没有战区经理、营运经理和大区经理，开店负责人展示【王磊】
     *
     * @return
     */
    String getShopManagerUserId();


    /**
     * 找督导，如果小区没有督导则带入战区经理，没有战区经理则带入大区经理、如果都没有则带入王磊
     *
     * @param supervision
     * @param regionId
     * @return
     */
    EnterpriseUserDO hierarchicalSearch(UserRoleEnum supervision, Long regionId);

    PageInfo<UserDTO> getAllUser(String keyword, Integer pageNum, Integer pageSize);

    /**
     * 根据角色查询用户列表
     *
     * @param request
     * @return
     */
    List<EnterpriseUserDO> findUserListByRole(SysRoleRequest request,Boolean flag);
}
