package com.corewing.app.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.corewing.app.dto.biz.user.BizUserIdRequest;
import com.corewing.app.dto.biz.user.BizUserStatusRequest;
import com.corewing.app.dto.biz.user.ResetPasswordRequest;
import com.corewing.app.entity.User;

import java.util.List;

/**
 * 应用用户 Service 接口
 */
public interface UserService extends IService<User> {

    /**
     * 获取用户分页数据
     * @param user
     * @return
     */
    Page<User> page(User user);

    /**
     * 新增用户数据
     * @param user
     * @return
     */
    boolean save(User user);

    /**
     * 更新用户数据
     * @param user
     * @return
     */
    boolean update(User user);

    /**
     * 根据用户名查询用户
     *
     * @param username 用户名
     * @return 用户信息
     */
    User getByUsername(String username);

    /**
     * 根据账号查询用户（支持用户名/邮箱/手机号）
     *
     * @param account 账号
     * @return 用户信息
     */
    User getByAccount(String account);

    /**
     * 根据邮箱查询用户
     *
     * @param email 邮箱
     * @return 用户信息
     */
    User getByEmail(String email);

    /**
     * 根据手机号查询用户
     *
     * @param telephone 手机号
     * @return 用户信息
     */
    User getByTelephone(String telephone);

    /**
     * 用户登录
     *
     * @param account  账号（用户名/邮箱/手机号）
     * @param password 密码
     * @return token
     */
    String login(String account, String password);

    /**
     * 用户注册
     *
     * @param user 用户信息
     * @param code 验证码
     * @param registerIp 注册IP
     * @return 是否成功
     */
    boolean register(User user, String code, String registerIp);

    /**
     * 更新登录IP
     *
     * @param userId  用户ID
     * @param loginIp 登录IP
     */
    void updateLoginIp(Long userId, String loginIp);

    /**
     * 更新登录信息（IP和归属地）
     *
     * @param userId  用户ID
     * @param loginIp 登录IP
     */
    void updateLoginInfo(Long userId, String loginIp);

    /**
     * 修改密码
     * @param resetPasswordRequest
     * @return
     */
    boolean resetPassword(ResetPasswordRequest resetPasswordRequest);

    /**
     * 批量修改状态
     * @param bizUserStatusRequest
     * @return
     */
    boolean batchStatus(BizUserStatusRequest bizUserStatusRequest);
}
