package com.reyun.saas.mob.user.service;

import com.reyun.saas.common.core.Service;
import com.reyun.saas.common.restResult.RestResult;
import com.reyun.saas.mob.user.domain.User;
import com.reyun.saas.mob.user.dto.MenuDTO;
import com.reyun.saas.mob.user.dto.user.UserDTO;
import com.reyun.saas.mob.user.dto.user.UserInputDTO;
import com.reyun.saas.mob.user.dto.user.UserOutpDTO;
import com.reyun.saas.mob.user.dto.user.UserPwdDTO;

import javax.servlet.http.HttpServletRequest;
import java.util.List;
import java.util.Map;

/**
*

*/
public interface UserService extends Service<User> {

    /**
     * 添加用户
     * @param inputDTO
     * @param request
     */
    void addUser(UserInputDTO inputDTO, HttpServletRequest request);

    /**
     * 修改用户信息
     * @param inputDTO
     */
    RestResult updateUser(UserInputDTO inputDTO,Long userId);


    /**
     * 根据用户名获取用户的相关权限信息
     * @param username
     * @return
     */
    UserDTO getRolesByUsername(String username);


    /**
     * 修改用户密码
     * @param dto
     */
    void updateUserPwd(UserPwdDTO dto);


    /**
     * 忘记密码 邮件发送随机密码
     */
    RestResult emailResetPwd(HttpServletRequest request,String email);


    /**
     * 批量冻结用户
     * @param ids
     * @param status
     */
    void frozeUser(String ids, Integer status);

    /**
     * 获取用户明细
     * @param id
     * @return
     */
    UserOutpDTO findOne(Long id);

    /**
     * 获取用户所有的权限
     * @return
     */
    List<MenuDTO> getUserMenus(Long userId);

    /**
     * 功能描述:通过key(id、email、username),value查询Appuser
     */
    UserOutpDTO findUserByOnly(String username, String username1);

    List<Map<String,Object>> findMyselfAndChSubordinate(Long loginUserId);

    /**
     * 查询用户的流量信息
     */
    RestResult flowInfo(Long userId);

    /**
     * 校验流量
     * @param userOutpDTO 目标用户
     * @return 流量未用尽为true 流量用尽为false
     */
    Boolean checkFlow(UserOutpDTO userOutpDTO);

    /**
     * 单点登录系统获取用户信息
     */
    RestResult yunUserInfo(HttpServletRequest request,Map<String,Object> map);

    /**
     * 从单点登录系统获取用户信息
     */
    UserOutpDTO getUserFormYun(String yucToken);

    /**
     * 校验临时随机密码是否过期
     * @param userOutpDTO 被校验用户
     * @return
     */
    Boolean checkRandomPwdPast(UserOutpDTO userOutpDTO);
}
