package org.dromara.member.service;

import com.baomidou.mybatisplus.extension.service.IService;
import org.dromara.common.mybatis.core.page.PageQuery;
import org.dromara.common.mybatis.core.page.TableDataInfo;
import org.dromara.member.domain.AppUser;
import org.dromara.member.domain.bo.AppUserBo;
import org.dromara.member.domain.vo.AppUserVo;

import java.util.Collection;
import java.util.List;

/**
 * App端用户信息Service接口
 *
 * @author pengles
 */
public interface AppUserService extends IService<AppUser> {

    /**
     * 查询App端用户信息
     *
     * @param userId App用户ID
     * @return App端用户信息
     */
    AppUserVo queryById(Long userId);

    /**
     * 查询App端用户信息列表
     *
     * @param bo        App端用户信息
     * @param pageQuery 分页查询条件
     * @return App端用户信息集合
     */
    TableDataInfo<AppUserVo> queryPageList(AppUserBo bo, PageQuery pageQuery);

    /**
     * 查询App端用户信息列表
     *
     * @param bo App端用户信息
     * @return App端用户信息集合
     */
    List<AppUserVo> queryList(AppUserBo bo);

    /**
     * 新增App端用户信息
     *
     * @param bo App端用户信息
     * @return 结果
     */
    Boolean insertByBo(AppUserBo bo);

    /**
     * 修改App端用户信息
     *
     * @param bo App端用户信息
     * @return 结果
     */
    Boolean updateByBo(AppUserBo bo);

    /**
     * 校验并批量删除App端用户信息
     *
     * @param ids     主键集合
     * @param isValid 是否校验,true-删除前校验,false-不校验
     * @return 结果
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 根据用户账号查询用户
     *
     * @param userName 用户账号
     * @return 用户信息
     */
    AppUserVo selectUserByUserName(String userName);

    /**
     * 根据手机号查询用户信息
     *
     * @param phone 手机号
     * @return 用户信息
     */
    AppUserVo selectUserByPhone(String phone);

    /**
     * 根据邮箱查询用户信息
     *
     * @param email 邮箱
     * @return 用户信息
     */
    AppUserVo selectUserByEmail(String email);

    /**
     * 校验用户账号是否唯一
     *
     * @param userName 用户账号
     * @return 结果
     */
    boolean checkUserNameUnique(String userName);

    /**
     * 校验手机号码是否唯一
     *
     * @param phone 手机号码
     * @return 结果
     */
    boolean checkPhoneUnique(String phone);

    /**
     * 校验email是否唯一
     *
     * @param email 用户邮箱
     * @return 结果
     */
    boolean checkEmailUnique(String email);

    /**
     * 用户注册
     *
     * @param bo 用户信息
     * @return 结果
     */
    Boolean register(AppUserBo bo);

    /**
     * 修改用户密码
     *
     * @param userId      用户ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return 结果
     */
    Boolean updatePassword(Long userId, String oldPassword, String newPassword);

    /**
     * 重置用户密码
     *
     * @param userId      用户ID
     * @param newPassword 新密码
     * @return 结果
     */
    Boolean resetPassword(Long userId, String newPassword);

    /**
     * 修改用户状态
     *
     * @param userId 用户ID
     * @param status 状态
     * @return 结果
     */
    Boolean updateUserStatus(Long userId, String status);


}