package com.ssyf.module.auth.service;

import com.github.pagehelper.PageInfo;
import com.ssyf.module.auth.domain.entity.User;
import com.ssyf.module.auth.domain.query.UserPageQuery;
import com.ssyf.module.auth.domain.query.UserQuery;
import java.util.List;

/**
* com.ssyf.module.auth.entity.User模型业务接口
* @author: auth
* @date: 2022-11-20
*/
public interface UserService{
    /**
     * 电话注册
     * @param phone
     * @return
     */
    User registerByPhone(String phone);

    /**
     * 邮件注册
     * @param mail
     * @return
     */
    User registerByMail(String mail);

    /**
     * 用户名注册
     * @param username
     * @param password
     * @return
     */
    User registerByUsername(String username, String password);

    /**
     * 账户密码登录
     * @param username
     * @param password
     * @return
     */
    User loginByUsername(String username, String password);

    /**
     * 邮件登录
     * @param mail
     * @return
     */
    User loginByMail(String mail);

    /**
     * 手机登录
     * @param phone
     * @return
     */
    User loginByPhone(String phone);

    /**
     * 登录并获取token信息
     * @param user
     * @return
     */
    String loginAndGetToken(User user);

    /**
     * 更新用户信息
     * @param userUid
     * @param query
     */
    void updateByUid(String userUid, UserQuery query);

    /**
     * 分页获取用户数据
     * @param query
     * @return
     */
    PageInfo<User> getPage(UserPageQuery query);

    List<User> getList(UserPageQuery query);


    /**
     * 创建用户
     * @param query
     * @return
     */
    User createUser(UserQuery query);


    User createYunying(UserQuery query);

    /**
     * 获取当前用户信息
     * @return
     */
    User getByCurrent();

    /**
     * 获取指定编码的用户信息
     * @param uid
     * @return
     */
    User getOneByUid(String uid);

    /**
     * 获取指定账号的用户信息
     * @param username
     * @return
     */
    User getOneByUsername(String username);

    /**
     * 获取指定电话的用户信息
     * @param mail
     * @return
     */
    User getOneByMail(String mail);

    /**
     * 获取指定邮箱的用户信息
     * @param phone
     * @return
     */
    User getOneByPhone(String phone);

    /**
     * 标记删除用户
     * @param uid
     */
    void markDelete(String uid);

    /**
     * 删除用户
     * @param uid
     */
    void removeByUid(String uid);

    /**
     * 校验存在并获取用户信息
     * @param uid
     * @return
     */
    User checkedAndGetByUid(String uid);

    /**
     * 判断用户是否存在
     * @param phone
     * @param mail
     * @param username
     */
    void checkedRepeatUser(String phone, String mail, String username);

    /**
     * 分配角色
     * @param userUid
     * @param roleUids
     */
    void assignOrRemoveRole(String userUid, List<String> roleUids);

    /**
     * 判断用户是否具有指定权限
     * @param userUid
     * @param permissions
     * @return
     */
    boolean authAnd(String userUid, List<String> permissions);

    /**
     * 判断用户是否具有指定权限
     * @param userUid
     * @param permissions
     * @return
     */
    boolean authOr(String userUid, List<String> permissions);

    /**
     * 获取指定用户的权限
     * @param userUid
     * @return
     */
    List<String> getPermissionByUserUid(String userUid);

    /**
     * 获取用户角色
     * @param userUid
     * @return
     */
    List<String> getRoleByUserUid(String userUid);
    /**
     * 脱敏
     * @param user
     * @return
     */
    User desensitize(User user);

    User checkedExistAndGet(String uuid);

}