package cn.qinys.platform.upms.api.service;

import cn.qinys.platform.entity.upms.UpmsTenant;
import cn.qinys.platform.upms.api.req.*;
import cn.qinys.platform.upms.api.resp.UserAccountInfoResp;
import cn.qinys.platform.upms.api.resp.UserDetailResp;
import cn.qinys.platform.upms.api.resp.UserPageResp;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;


import java.util.List;

/**
 * Tenant 的服务接口
 *
 * @author tanlie
 * @date 2024-05-21
 */
public interface ITenantService extends IService<UpmsTenant> {

    /**
     * 分页查询
     *
     * @param query 查询条件
     * @return 分页数据
     */
    Page<UpmsTenant> queryPage(TenantQueryReq query);

    /**
     * 新增
     *
     * @param req TenantCreateReq
     */
    void createTenant(TenantCreateReq req);

    /**
     * 修改
     *
     * @param req TenantUpdateReq
     */
    void updateTenant(TenantUpdateReq req);

    /**
     * 删除
     *
     * @param ids 主键列表
     */
    void removeTenant(List<String> ids);

    /**
     *
     * @param tenantId
     */
    void syncToTenant(String tenantId);

    /**
     * 后台登录用户分页
     *
     * @param req
     * @return
     */
    Page<UserPageResp> getUserPage(UserPageReq req);

    /**
     * 获取账号相关信息
     *
     * @param id
     * @return
     */
    UserAccountInfoResp getAccountInfo(String id);

    /**
     * 修改用户锁定状态
     *
     * @param req
     */
    void changeLock(UserChangeLockReq req);

    /**
     * 修改密码
     *
     * @param req
     */
    void resetPassword(UserResetPasswordReq req);

    /**
     * 用户角色操作
     *
     * @param req
     */
    void userRoleAdd(UserRoleOperationReq req);

    /**
     * 用户角色操作
     *
     * @param req
     */
    void userRoleDelete(UserRoleOperationReq req);

    /**
     * 用户删除
     *
     * @param req
     */
    void removeUser(UserRemoveReq req);

    /**
     * 用户详情
     *
     * @param userId
     */
    UserDetailResp userDetailById(String userId);

    /**
     * 修改用户
     *
     * @param req
     */
    void updateUser(UserUpdateReq req);

    /**
     * 新增用户
     *
     * @param req
     */
    void createUser(UserCreateReq req);
}