package com.CUST.brain.service;

import com.CUST.brain.dao.domain.system.SysUser;
import com.CUST.brain.common.dto.system.LoginRequestDTO;
import com.CUST.brain.common.dto.system.LoginResponseDTO;
import com.CUST.brain.common.dto.system.UserInfoResponseDTO;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 系统用户服务接口
 */
public interface SysUserService extends IService<SysUser> {
    
    /**
     * 用户登录
     *
     * @param loginDTO 登录信息
     * @return 登录响应
     */
    LoginResponseDTO login(LoginRequestDTO loginDTO);
    
    /**
     * 用户登出
     *
     * @param token 用户token
     * @param userId 用户ID
     */
    void logout(String token, String userId);
    
    /**
     * 添加用户
     *
     * @param user 用户信息
     * @return 是否成功
     */
    boolean addUser(SysUser user);
    
    /**
     * 根据用户名查询用户
     *
     * @param username 用户名
     * @return 用户信息
     */
    SysUser getByUsername(String username);

    /**
     * 更新用户状态
     *
     * @param id 用户ID
     * @param status 状态：0-禁用，1-启用
     * @return 是否成功
     */
    boolean updateStatus(String id, Integer status);

    /**
     * 更新用户密码
     *
     * @param id 用户ID
     * @param oldPassword 旧密码
     * @param newPassword 新密码
     * @return 是否成功
     */
    boolean updatePassword(String id, String oldPassword, String newPassword);

    /**
     * 重置用户密码
     *
     * @param id 用户ID
     * @return 新密码
     */
    String resetPassword(String id);

    /**
     * 更新用户最后登录信息
     *
     * @param id 用户ID
     * @param ip 登录IP
     * @return 是否成功
     */
    boolean updateLoginInfo(String id, String ip);

    /**
     * 获取用户信息
     *
     * @param userId 用户ID
     * @return 用户信息
     */
    UserInfoResponseDTO getUserInfo(String userId);

    /**
     * 更新用户
     *
     * @param user 用户信息
     * @return 是否成功
     */
    boolean updateUser(SysUser user);

    /**
     * 用户分配角色
     *
     * @param userId 用户id,roleIds 角色id列表
     *
     */
    void assignRoles(String userId, List<String> roleIds);

    /**
     * 删除用户并清理相关缓存
     */
    boolean deleteUser(String userId);
} 