package com.yida.data.system.mapper;

import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.yida.data.common.core.entity.CurrentUser;
import com.yida.data.common.core.entity.system.SystemUser;

import com.yida.data.system.dto.SchoolAdminAccountSelectPageDTO;
import com.yida.data.system.vo.SchoolAdminAccountSelectPageVO;
import org.apache.ibatis.annotations.Param;

import java.util.List;

/**
 * @author MrBird
 */
public interface UserMapper extends BaseMapper<SystemUser> {

    /**
     * 查找用户详细信息
     *
     * @param page                分页对象
     * @param user                用户对象，用于传递查询条件
     * @param <T>                 type
     * @return Ipage
     */
    <T> IPage<SystemUser> findUserDetailPage(Page<T> page,
                                             @Param("user") SystemUser user);

    /**
     * 查找用户详细信息
     *
     * @param user 用户对象，用于传递查询条件
     * @return List<User>
     */
    List<SystemUser> findUserDetail(@Param("user") SystemUser user);

    SystemUser findUserByUsername(String username);

    SystemUser findUserByMobile(String mobile);

    /**
     * 获取代理商管理员账号详情
     *
     * @param agentId  代理商id
     * @param rolePerm 代理商相关角色标识
     * @return com.yida.data.common.core.entity.system.SystemUser
     * @author ZYJ
     * @date 2021/9/29 16:05
     */
    SystemUser getAgentAdminAccountInfo(@Param("agentId") Long agentId,
                                        @Param("rolePerm") String rolePerm);

    /**
     * 代理商查询学校管理员账号列表数据
     *
     * @param toPage                          分页数据
     * @param schoolAdminAccountSelectPageDTO 代理商查询学校管理员账号列表数据请求类
     * @param rolePerm                        学校负责人角色标识
     * @return com.baomidou.mybatisplus.core.metadata.IPage<com.yida.data.system.vo.SchoolAdminAccountSelectPageVO>
     * @author ZYJ
     * @date 2021/9/30 9:35
     */
    IPage<SchoolAdminAccountSelectPageVO> listSchoolAdminAccountPage(Page<SystemUser> toPage,
                                                                     @Param("dto") SchoolAdminAccountSelectPageDTO schoolAdminAccountSelectPageDTO,
                                                                     @Param("rolePerm") String rolePerm);

    /**
     * 查询角色人
     *
     * @param roles
     * @return
     */
    List<Long> findRoleId(@Param("roles") List<String> roles);

    /**
     * 学校或教育局及以下具有创建账号的数据   自己创建的账号+当前登陆账号部门以下的账号
     *
     * @param page        分页条件
     * @param user        查询条件
     * @param childIdList 子部门id集合
     * @param currentUser 当前登陆用户信息
     * @return com.baomidou.mybatisplus.core.metadata.IPage<com.yida.data.common.core.entity.system.SystemUser>
     * @author ZYJ
     * @date 2021/12/7 17:53
     */
    IPage<SystemUser> findUserPage(Page<SystemUser> page,
                                   @Param("user") SystemUser user,
                                   @Param("childIdList") List<Long> childIdList,
                                   @Param("currentUser") CurrentUser currentUser);
}
