package cn.meowrain.aioj.backend.blogservice.service;

import cn.meowrain.aioj.backend.blogservice.dao.entity.Follow;
import cn.meowrain.aioj.backend.blogservice.dto.req.FollowRequestDTO;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.service.IService;

/**
 * 用户关注服务接口
 *
 * @author AIOJ
 */
public interface FollowService extends IService<Follow> {

    /**
     * 关注用户
     *
     * @param request 关注请求
     * @return 是否成功
     */
    Boolean followUser(FollowRequestDTO request);

    /**
     * 取消关注用户
     *
     * @param followingId 被关注者ID
     * @return 是否成功
     */
    Boolean unfollowUser(Long followingId);

    /**
     * 查询关注状态
     *
     * @param followerId  关注者ID
     * @param followingId 被关注者ID
     * @return 是否已关注
     */
    Boolean isFollowing(Long followerId, Long followingId);

    /**
     * 分页查询关注列表
     *
     * @param userId  用户ID
     * @param current 页码
     * @param size    每页数量
     * @return 用户ID列表
     */
    IPage<Long> getFollowingList(Long userId, Integer current, Integer size);

    /**
     * 分页查询粉丝列表
     *
     * @param userId  用户ID
     * @param current 页码
     * @param size    每页数量
     * @return 用户ID列表
     */
    IPage<Long> getFollowerList(Long userId, Integer current, Integer size);

    /**
     * 获取用户关注数
     *
     * @param userId 用户ID
     * @return 关注数
     */
    Long getFollowingCount(Long userId);

    /**
     * 获取用户粉丝数
     *
     * @param userId 用户ID
     * @return 粉丝数
     */
    Long getFollowerCount(Long userId);
}
