package com.ruoyi.cs.service;

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

import com.alibaba.fastjson.JSONObject;
import com.ruoyi.common.core.domain.AjaxResult;
import com.ruoyi.cs.domain.CsOrderMemberUser;
import com.ruoyi.cs.domain.TeamUserVO;
import com.ruoyi.cs.domain.dto.CsOrderMemberUserLoginDTO;
import com.ruoyi.cs.domain.dto.CsOrderMemberUserReSetPwdDTO;
import com.ruoyi.cs.domain.dto.CsOrderMemberUserRegisterDTO;
import com.ruoyi.cs.domain.vo.CsOrderMemberUserVO;

/**
 * 使用人员信息Service接口
 *
 * @author cc
 * @date 2024-04-23
 */
public interface ICsOrderMemberUserService
{
    /**
     * 查询使用人员信息
     *
     * @param memberUserId 使用人员信息主键
     * @return 使用人员信息
     */
    public CsOrderMemberUser selectCsUserInfoByMemberUserId(String memberUserId);

    /**
     * 查询使用人员信息列表
     *
     * @param csOrderMemberUser 使用人员信息
     * @return 使用人员信息集合
     */
    public List<CsOrderMemberUser> selectCsUserInfoList(CsOrderMemberUser csOrderMemberUser);

    /**
     * 新增使用人员信息
     *
     * @param csOrderMemberUser 使用人员信息
     * @return 结果
     */
    public int insertCsUserInfo(CsOrderMemberUser csOrderMemberUser);

    /**
     * 修改使用人员信息
     *
     * @param csOrderMemberUser 使用人员信息
     * @return 结果
     */
    public int updateCsUserInfo(CsOrderMemberUser csOrderMemberUser);

    /**
     * 批量删除使用人员信息
     *
     * @param memberUserIds 需要删除的使用人员信息主键集合
     * @return 结果
     */
    public int deleteCsUserInfoByMemberUserIds(String[] memberUserIds);

    /**
     * 删除使用人员信息信息
     *
     * @param memberUserId 使用人员信息主键
     * @return 结果
     */
    public int deleteCsUserInfoByMemberUserId(String memberUserId);

    /**
     * 注册
     * @param registerDTO 参数
     * @return 结果
     */
    public JSONObject csMemberUserLoginOrRegister(CsOrderMemberUserRegisterDTO registerDTO);

    /**
     * 登录
     * @param loginDTO 参数
     * @return 结果
     */
    public JSONObject csUserLogin(CsOrderMemberUserLoginDTO loginDTO);

    /**
     * 查询用户信息
     * @param memberUserId 用户ID
     * @param email 邮箱
     * @param phone 用户电话
     * @return 结果
     */
    public CsOrderMemberUser getMemberUserInfo(String memberUserId, String email, String phone);

    /**
     * 查询用户VO信息
     * @return 结果
     */
    public CsOrderMemberUserVO getMemberUserInfo();

    /**
     * 发送短信验证码
     * @return 结果
     */
    public void sendEmailCode(String emailTo,String code);

    /**
     * 找回密码
     * @param resetPwdDTO 参数
     * @return 结果
     */
    public int resetPassword(CsOrderMemberUserReSetPwdDTO resetPwdDTO);

    /**
     * 激活账号
     * @param confirmCode 激活码
     * @return
     */
    public AjaxResult  activationAccount(String confirmCode);

    /**
     * 修改操作指引状态
     * @return
     */
    public int  editGuideStatus();

    /**
     * 查询工单用户信息列表
     *
     * @param csOrderMemberUser 工单用户信息
     * @return 工单用户信息集合
     */
    public List<CsOrderMemberUser> selectCsOrderMemberUserList(CsOrderMemberUser csOrderMemberUser);

    /**
     * 查询管理端人员相关统计
     *
     * @param beginAt 开始时间
     * @param endAt 结束时间
     * @return 人员数量集合
     */
    public Map<String,Object> selectUserStatistics(String beginAt, String endAt);

    /**
     * 查询工单用户、资源用户、特殊资源用户信息列表
     *
     * @param csOrderMemberUser 用户信息
     * @return 工单用户信息集合
     */
    public List<CsOrderMemberUser> selectAllUserListByUserType(CsOrderMemberUser csOrderMemberUser);

    /**
     * 查询团队信息列表
     *
     * @param csOrderMemberUser 用户信息
     * @return 工单用户信息集合
     */
    public List<TeamUserVO> selectTeamUserList(CsOrderMemberUser csOrderMemberUser);

    /**
     * 查询团队信息
     *
     * @param memberUserId 用户ID
     * @return 团队信息
     */
    public CsOrderMemberUser selectTeamUserInfoByMemberUserId(String memberUserId);

    /**
     * 用户重置密码
     *
     * @param csOrderMemberUser 人员信息
     * @return 结果
     */
    public int resetPassword(CsOrderMemberUser csOrderMemberUser);

    /**
     * 修改用户状态
     *
     * @param csOrderMemberUser 人员信息
     * @return 结果
     */
    public int updateUserStatus(CsOrderMemberUser csOrderMemberUser);

    /**
     * 查询团队成员列表
     *
     * @param csOrderMemberUser 用户信息
     * @return 工单用户信息集合
     */
    public List<CsOrderMemberUser> selectTeamMemberList(CsOrderMemberUser csOrderMemberUser);

    /**
     * 发送激活邮件
     * @param result 返回参数
     * @param userInfo 超算用户
     * @param loginType 登录类型（0-小程序，1-PC）
     */
    public void sendActivationEmail(JSONObject result, CsOrderMemberUser userInfo, Integer loginType);

}
