package shop.alien.store.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;
import shop.alien.entity.result.R;
import shop.alien.entity.store.LifeSys;
import shop.alien.entity.store.UserLoginInfo;
import shop.alien.entity.store.dto.SystemUserAddDto;
import shop.alien.entity.store.dto.SystemUserStatusDto;
import shop.alien.entity.store.dto.SystemUserUpdateDto;
import shop.alien.entity.store.vo.LifeSysVo;
import shop.alien.entity.store.vo.SystemLoginVo;

/**
 * 数据中台基本服务接口
 *
 * @author YinDP
 * @since 2025-02-27
 */
public interface SystemService extends IService<LifeSys> {

    public SystemLoginVo login(String username, String password);

    public SystemLoginVo logout(UserLoginInfo userLoginInfo);

    /**
     * 系统用户注册
     *
     * @param userName 用户名
     * @param password 密码
     * @param roleId   角色id
     * @return R<LifeSys>
     */
    R<LifeSys> register(String userName, String password, String roleId);

    /**
     * 新增系统用户账号
     *
     * @param addDto 新增用户信息
     * @return R<LifeSys>
     */
    R<LifeSys> addUser(SystemUserAddDto addDto);

    /**
     * 修改系统用户账号
     *
     * @param updateDto 修改用户信息
     * @return R<LifeSys>
     */
    R<LifeSys> updateUser(SystemUserUpdateDto updateDto);

    /**
     * 修改系统用户状态
     *
     * @param statusDto 用户状态信息
     * @return R<LifeSys>
     */
    R<LifeSys> updateUserStatus(SystemUserStatusDto statusDto);

    /**
     * 重置系统用户密码
     *
     * @param userId 用户ID
     * @return R<LifeSys>
     */
    R<LifeSys> resetPassword(Integer userId);

    /**
     * 分页查询系统用户列表
     *
     * @param page  页码
     * @param size  每页大小
     * @param userName 用户名
     * @param realName 真实姓名
     * @param phone    联系电话
     * @param departmentId 部门ID
     * @param roleId   角色ID
     * @return IPage<LifeSys>
     */
    IPage<LifeSysVo> getUserPage(int page, int size, String userName, String realName, String phone, String departmentId, Long roleId);

    /**
     * 清除用户的部门
     *
     * @param userId 用户ID
     * @return R<Boolean>
     */
    R clearUserDepartment(String userId);
}
