package com.sdtool.common.api;

import com.sdtool.common.entity.site.ERPTokenUser;
import com.sdtool.common.entity.system.LoginUser;
import com.sweetfish.service.RetResult;
import com.sweetfish.source.PageFlipper;
import org.rex.RMap;

import java.util.List;

public interface LoginUserService extends ScriptService {

    /**
     * 从redis中获取人员档案，用于简单数据交互
     *
     * @param userId       用户id
     * @param supplierCode 分表
     * @return 用户信息
     */
    LoginUser getRedisLoginUser(long userId, long supplierCode);

    /**
     * 获取登录人员姓名
     *
     * @param userId       用户id
     * @param supplierCode 分表
     * @return 用户姓名
     */
    String getRedisLoginUserName(long userId, long supplierCode);

    /**
     * 获取登录人的部门名称
     *
     * @param userId       用户id
     * @param supplierCode 分表
     * @return 部门名称
     */
    String getRedisLoginUserDeptName(long userId, long supplierCode);

    @SuppressWarnings("unused")
    List<LoginUser> getRedisLoginUserList(String[] userIds, long supplierCode);

    /**
     * 获取用户列表
     *
     * @param searchData 查询条件
     * @return 用户列表
     */
    @SuppressWarnings("rawtypes")
    RetResult<List<LoginUser>> getLoginUserList(RMap searchData, PageFlipper pageFlipper, String dataSourceId, long supplierCode);

    /**
     * 从数据库中获取用户信息，用于人员档案的修改
     *
     * @param userId       用户id
     * @param dataSourceId 分库
     * @param supplierCode 分表
     * @return 用户信息
     */
    RetResult<LoginUser> getLoginUserInfo(long userId, String dataSourceId, long supplierCode);

    /**
     * 判断账号是否存在
     *
     * @param loginName 账号
     * @return 账号是否存在
     */
    RetResult<Integer> checkAccount(String loginName, String dataSourceId, long supplierCode);

    /**
     * 增加用户
     *
     * @param userInfo    用户信息
     * @param currentUser 操作人
     * @return 操作信息
     */

    RetResult<LoginUser> addLoginUser(LoginUser userInfo, ERPTokenUser currentUser, String dataSourceId, long supplierCode);

    RetResult<LoginUser> addOnlyLoginUserInfo(LoginUser userInfo, ERPTokenUser currentUser, String dataSourceId, long supplierCode);

    /**
     * 修改用户
     *
     * @param userInfo    用户信息
     * @param currentUser 操作人
     * @return 操作信息
     */
    RetResult<LoginUser> updateLoginUser(LoginUser userInfo, ERPTokenUser currentUser, String dataSourceId, long supplierCode);

    RetResult<LoginUser> updateOnlyLoginUserInfo(LoginUser userInfo, ERPTokenUser currentUser, String dataSourceId, long supplierCode);

    RetResult<LoginUser> configLoginUserRole(LoginUser userInfo, ERPTokenUser currentUser, String dataSourceId, long supplierCode);

    /**
     * 切换用户状态
     *
     * @param userInfo    用户信息
     * @param currentUser 操作人
     * @return 操作信息
     */
    RetResult<LoginUser> voidLoginUser(LoginUser userInfo, ERPTokenUser currentUser, String dataSourceId, long supplierCode);

    /**
     * 重置用户密码
     *
     * @param userInfo    用户信息
     * @param currentUser 操作人
     * @return 操作信息
     */
    RetResult<LoginUser> resetLoginUser(LoginUser userInfo, ERPTokenUser currentUser, String dataSourceId, long supplierCode);

    /**
     * 修改登录密码，登录用户修改自己
     *
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @param currentUser 操作人
     * @return 操作信息
     */
    RetResult<LoginUser> changeMyPassword(String oldPassword, String newPassword, ERPTokenUser currentUser, String dataSourceId, long supplierCode);

}
