package com.jeeplus.sys.feign;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.jeeplus.common.constant.AppNameConstants;
import com.jeeplus.sys.domain.User;
import com.jeeplus.sys.factory.UserApiFallbackFactory;
import com.jeeplus.sys.service.dto.CertDTO;
import com.jeeplus.sys.service.dto.DataRuleDTO;
import com.jeeplus.sys.service.dto.UserDTO;
import org.springframework.cloud.openfeign.FeignClient;
import org.springframework.web.bind.annotation.*;

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


@FeignClient(contextId = "userApi", name = AppNameConstants.APP_SYSTEM_SERVICE, fallbackFactory = UserApiFallbackFactory.class)
public interface IUserApi {

    String BASE_URL = "/feign/sys/user";

    /**
     * 根据登录名获取用户
     *
     * @param loginName
     * @return 取不到返回null
     */
    @GetMapping(value = BASE_URL + "/getByLoginName")
    UserDTO getByLoginName(@RequestParam(value = "loginName") String loginName, @RequestParam(value = "tenantId") String tenantId);

    /**
     * 根据登录名获取用户
     *
     * @param loginName
     * @return 取不到返回null
     */
    @GetMapping(value = BASE_URL + "/getByLoginNameNotTenantId")
    UserDTO getByLoginNameNotTenantId(@RequestParam(value = "loginName") String loginName);

    /**
     * 清除用户缓存
     */
    @PostMapping(value = BASE_URL + "/clearCache")
    void clearCache(@RequestBody UserDTO userDTO);

    /**
     * 获取用户数据权限
     */

    @PostMapping(value = BASE_URL + "/getDataRuleList")
    List <DataRuleDTO> getDataRuleList(@RequestBody UserDTO userDTO);

    /**
     * 更新用户
     *
     * @param userDTO
     */
    @PostMapping(value = BASE_URL + "/updateUser")
    void updateUser(@RequestBody UserDTO userDTO);

    /**
     * 获取用户访问权限
     *
     * @param loginName
     * @return
     */
    @GetMapping(value = BASE_URL + "/getPermissions")
    Set <String> getPermissions(@RequestParam(value = "loginName") String loginName);

    /**
     * 获取token获取当前登录用户
     *
     * @return
     */
    @RequestMapping(value = BASE_URL + "/getByToken", method = RequestMethod.POST)
    UserDTO getByToken(@RequestParam("token") String token);

    /**
     * 根据id获取用户
     *
     * @param id
     * @return
     */
    @GetMapping(value = BASE_URL + "/getById")
    UserDTO getById(@RequestParam("id") String id);

    /**
     * 根据id获取用户
     *
     * @param id
     * @return
     */
    @GetMapping(value = BASE_URL + "/getByIdForXXL")
    String getByIdForXXL(@RequestParam("id") String id);

    /**
     * 根据id获取用户
     *
     * @param id
     * @return
     */
    @GetMapping(value = BASE_URL + "/getFlowAbleById")
    UserDTO getFlowAbleById(@RequestParam("id") String id);

    /**
     * 根据岗位id获取用户列表
     *
     * @param postId
     * @return
     */
    @GetMapping(value = BASE_URL + "/findListByPostId")
    List <UserDTO> findListByPostId(@RequestParam("postId") String postId);

    /**
     * 获取所有的用户信息
     *
     * @return
     */
    @GetMapping(value = BASE_URL + "/getAllUserInfo")
    List <UserDTO> getAllUserInfo();

    /**
     * 根据岗位id获取用户列表
     *
     * @param postId
     * @return
     */
    @GetMapping(value = BASE_URL + "/findListFlowAbleByPostId")
    List <UserDTO> findListFlowAbleByPostId(@RequestParam("postId") String postId);

    /**
     * 根据角色id获取用户列表
     *
     * @param roleId
     * @return
     */
    @GetMapping(value = BASE_URL + "/findListByRoleId")
    List <UserDTO> findListByRoleId(@RequestParam("roleId") String roleId);

    /**
     * 根据公司id获取用户列表
     *
     * @param companyId
     * @return
     */
    @GetMapping(value = BASE_URL + "/findListByCompanyId")
    List <UserDTO> findListByCompanyId(@RequestParam("companyId") String companyId);

    /**
     * 根据部门id获取用户列表
     *
     * @param officeId
     * @return
     */
    @GetMapping(value = BASE_URL + "/findListByOfficeId")
    List <UserDTO> findListByOfficeId(@RequestParam("officeId") String officeId);

    /**
     * 单一登录逻辑处理
     *
     * @param loginName
     * @return
     */
    @GetMapping(value = BASE_URL + "/isEnableLogin")
    boolean isEnableLogin(@RequestParam("tenantId") String tenantId, @RequestParam("loginName") String loginName);

    /**
     * 获取角色
     *
     * @return
     */
    @GetMapping(value = "/feign/sys/user/getUserDTOByName")
    UserDTO getUserDTOByName(@RequestParam(value = "name") String name);

    /**
     * 修改用户更新密码状态信息
     *
     * @param userDTO
     * @return 取不到返回null
     */
    @GetMapping(value = BASE_URL + "/updateUserUpPassword")
    void updateUserUpPassword(@RequestBody UserDTO userDTO);

    /**
     * 获取系统参数
     * @param parameter
     * @return
     */
    @GetMapping(value = BASE_URL + "/getSysParam")
    String getSysParam(@RequestParam(value = "parameter") String parameter,@RequestParam(value = "token") String token);

    @GetMapping(value = BASE_URL + "/getCertListByUserId")
    List<CertDTO> getCertListByUserId();

    /**
     * 获取文件的Dir
     * @param url
     * @return
     */
    @GetMapping(value = BASE_URL + "/getFileDir")
    String getFileDir(@RequestParam(value = "url")String url);

    /**
     * 删除文件
     * @param id
     * @return
     */
    @GetMapping(value = BASE_URL + "/delFile")
    boolean delFile(@RequestParam(value = "id")String id);

    /**
     * 根据角色英文名称查询角色下人员信息
     * @param enName 角色英文名称
     * @return
     */
    @GetMapping(value = BASE_URL + "/getUserInfoByEnName")
    List<UserDTO> getUserInfoByEnName(@RequestParam(value = "enName")String enName);

    /**
     * 根据姓名查询用户信息
     * @param name
     * @return
     */
    @GetMapping(value = BASE_URL + "/selectListByName")
    List<User> selectListByName(@RequestParam(value = "name")String name);

    /**
     * 根据经办人部门查询所有的用户信息
     * @param operatorOffice
     * @return
     */
    @GetMapping(value = BASE_URL + "/getUserByOfficeAll")
    List<User> getUserByOfficeAll(@RequestParam(value = "operatorOffice")String operatorOffice);

    @GetMapping(value = BASE_URL + "/findPage")
    IPage<UserDTO> findPage();

    @RequestMapping(value = BASE_URL + "/saveOrUpdate", method = RequestMethod.POST)
    void saveOrUpdate(@RequestBody UserDTO userDTO);

    /**
     * 根据关键字查询相关企业
     * @param keyword
     * @return
     */
    @GetMapping(value = BASE_URL + "/enterpriseSearchByName")
    String enterpriseSearchByName(@RequestParam(value = "keyword")String keyword);

    /**
     * 根据id查询企业税号
     * @param id
     * @return
     */
    @GetMapping(value = BASE_URL + "/enterpriseTicketInfoQueryById")
    String enterpriseTicketInfoQueryById(@RequestParam(value = "id")String id);

    /**
     * 根据用户name获取用户id
     * @param name
     * @return
     */
    @GetMapping(value = BASE_URL + "/getUserIdByName")
    String getUserIdByName(@RequestParam(value = "name")String name);

    /**
     * 获取嘉溢所有员工
     * @return
     */
    @GetMapping(value = BASE_URL + "/getJyUserList")
    String getJyUserList();
}


