package com.emotion.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.emotion.common.PageResult;
import com.emotion.dto.request.UserCreateRequest;
import com.emotion.dto.request.UserPageRequest;
import com.emotion.dto.request.UserUpdateRequest;
import com.emotion.dto.request.UserProfileUpdateRequest;
import com.emotion.dto.response.UserResponse;
import com.emotion.entity.User;

import java.time.LocalDateTime;

/**
 * 用户服务接口
 *
 * @author huazhongmin
 * @date 2025-07-23
 */
public interface UserService extends IService<User> {

    /**
     * 分页查询用户响应
     */
    PageResult<UserResponse> getPageWithResponse(UserPageRequest request);

    /**
     * 根据ID获取用户响应
     */
    UserResponse getUserResponseById(String id);

    /**
     * 创建用户并返回响应
     */
    UserResponse createUserWithResponse(UserCreateRequest request);

    /**
     * 更新用户并返回响应
     */
    UserResponse updateUserWithResponse(UserUpdateRequest request);

    /**
     * 更新当前用户个人资料并返回响应
     */
    UserResponse updateCurrentUserProfileWithResponse(UserProfileUpdateRequest request);

    /**
     * 获取当前用户个人资料并返回响应
     */
    UserResponse getCurrentUserProfileWithResponse();

    /**
     * 删除用户
     */
    boolean deleteUser(String id);

    /**
     * 根据账号获取用户
     */
    User getByAccount(String account);

    /**
     * 根据邮箱获取用户
     */
    User getByEmail(String email);

    /**
     * 根据手机号获取用户
     */
    User getByPhone(String phone);

    /**
     * 创建用户
     *
     * @param account 账号
     * @param username 用户名
     * @param password 密码（明文，会在方法内加密）
     * @param email 邮箱（可为null）
     * @param phone 手机号（可为null）
     * @return 创建的用户
     */
    User createUser(String account, String username, String password, String email, String phone);

    /**
     * 更新用户最后活跃时间
     *
     * @param userId 用户ID
     * @param lastActiveTime 最后活跃时间
     */
    void updateLastActiveTime(String userId, LocalDateTime lastActiveTime);
}