package shop.alien.gateway.service;

import shop.alien.entity.result.R;
import shop.alien.entity.store.LifeSys;
import shop.alien.entity.store.UserLoginInfo;
import shop.alien.entity.store.vo.SystemLoginVo;

import java.util.List;

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

    public SystemLoginVo login(String username, String password);

    /**
     * 退出登录
     * <p>
     * 退出登录时会执行以下操作：
     * 1. 参数校验：验证用户登录信息是否有效
     * 2. 删除Redis中的token缓存（key格式：web_用户名）
     * 3. 返回退出登录结果
     * </p>
     *
     * @param userLoginInfo 用户登录信息，包含userId、userName等信息
     * @return SystemLoginVo 退出登录结果，包含退出状态信息
     * @throws IllegalArgumentException 当用户信息为空或用户名为空时抛出
     */
    SystemLoginVo logout(UserLoginInfo userLoginInfo);

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

    /**
     * 编辑账户
     *
     * @param lifeSys
     */
    int updateAccounInfo(LifeSys lifeSys);

    /**
     * 根据ID查询系统用户
     *
     * @param id 用户ID
     * @return R<LifeSys>
     */
    R<LifeSys> getById(Integer id);

    /**
     * 查询系统用户列表
     *
     * @param userName 用户名（可选，模糊查询）
     * @param status 账号状态（可选，启用1 禁用0）
     * @return R<List<LifeSys>>
     */
    R<List<LifeSys>> list(String userName, Integer status);

    /**
     * 删除系统用户（逻辑删除）
     *
     * @param id 用户ID
     * @return R<String>
     */
    R<String> deleteById(Integer id);

}
