package com.njcn.product.cnuser.user.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.njcn.product.cnuser.user.pojo.param.SysUserParam;
import com.njcn.product.cnuser.user.pojo.po.SysUser;

import java.util.List;

/**
 * @author caozehui
 * @since 2024-11-08
 */
public interface ISysUserService extends IService<SysUser> {

    /**
     * 分页查询用户列表
     *
     * @param queryParam 分页查询参数
     * @return 分页查询结果
     */
    Page<SysUser> listUser(SysUserParam.SysUserQueryParam queryParam);

    /**
     * 根据登录名查询用户
     *
     * @param loginName
     * @return 用户对象，如果没有查询到则返回null
     */
    SysUser getUserByLoginName(String loginName);

    /**
     * 根据手机号查询用户
     *
     * @param phone         手机号
     * @param isExcludeSelf 是否排除自己
     * @param id            排除自己时需要传入自己的ID
     * @return 用户对象，如果没有查询到则返回null
     */
    SysUser getUserByPhone(String phone, boolean isExcludeSelf, String id);

    /**
     * 根据用户名（别名）查询用户
     *
     * @param name          用户名（别名）
     * @param isExcludeSelf 是否排除自己
     * @param id            排除自己时需要传入自己的ID
     * @return 用户对象，如果没有查询到则返回null
     */
    SysUser getUserByName(String name, boolean isExcludeSelf, String id);

    /**
     * 根据邮箱查询用户
     * @param email 邮箱
     * @param isExcludeSelf 是否排除自己
     * @param id 排除自己时需要传入自己的ID
     * @return 用户对象，如果没有查询到则返回null
     */
    SysUser getUserByEmail(String email, boolean isExcludeSelf, String id);

    /**
     * 新增用户
     *
     * @param addUserParam 新增用户参数
     * @return 结果，true表示新增成功，false表示新增失败
     */
    boolean addUser(SysUserParam.SysUserAddParam addUserParam);

    /**
     * 更新用户
     *
     * @param updateUserParam 更新用户参数
     * @return 结果，true表示更新成功，false表示更新失败
     */
    boolean updateUser(SysUserParam.SysUserUpdateParam updateUserParam);

    /**
     * 修改密码
     * @return 结果，true表示修改成功，false表示修改失败
     */
    boolean updatePassword(SysUserParam.SysUserUpdatePasswordParam param);

    /**
     * 批量删除用户
     *
     * @param ids 用户ID列表
     * @return 结果，true表示删除成功，false表示删除失败
     */
    boolean deleteUser(List<String> ids);

    /**
     * 根据登录名和密码查询用户
     *
     * @param loginName 登录名
     * @param password 密码
     * @return 用户对象，如果没有查询到则返回null
     */
    SysUser getUserByLoginNameAndPassword(String loginName, String password);

    /**
     * 更新用户登录时间为当前时间
     *
     * @param userId
     */
    boolean updateLoginTime(String userId);
}
