package com.wzj.soopin.content.service;

import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.wzj.soopin.content.domain.bo.*;
import com.wzj.soopin.content.domain.po.Vlog;
import com.wzj.soopin.content.domain.vo.IndexVlogVO;
import com.wzj.soopin.content.utils.PagedGridResult;

import java.util.List;
import java.util.Map;

public interface VlogService extends IService<Vlog> {
    /**
     * 修改视频首帧图
     */
    public void updateVlogFirstImg(String fileId,String url,String fileUrl);
    /**
     * 修改视频状态
     */
    public void updateVlogStatus(String fileId,Integer status,String reason);

    /**
     * 新增vlog视频
     */
    public void createVlog(VlogBO vlogBO);

    /**
     * 根据视频主键查询vlog
     */
    public IndexVlogVO getVlogDetailById( String vlogId);

    /**
     * 用户把视频改为公开/私密的视频
     */
    public void changeToPrivateOrPublic(String userId,
                                        String vlogId,
                                        Integer yesOrNo);

    public void changeVlogStatus(String userId,
                                 String vlogId,
                                 Integer status);
    /**
     * 查询用的公开/私密的视频列表
     */
    public Page<IndexVlogVO> queryMyVlogList(MyListBO bo, Page page);

    /**
     * 用户点赞/喜欢视频
     */
    public void userLikeVlog(String userId, String vlogId);

    /**
     * 用户取消点赞/喜欢视频
     */
    public void userUnLikeVlog(String userId, String vlogId);

    /**
     * 获得用户点赞视频的总数
     */
    public Integer getVlogBeLikedCounts(String vlogId);

    /**
     * 查询用户点赞过的短视频
     */
    public Page<IndexVlogVO> getMyLikedVlogList( Page page);

    /**
     * 查询用户关注的博主发布的短视频列表
     */
    public Page<IndexVlogVO> getMyFollowVlogList( Page page);

    /**
     * 查询朋友发布的短视频列表
     */
    public Page<IndexVlogVO> getMyFriendVlogList( Page page);

    /**
     * 根据主键查询vlog
     */
    public Vlog getVlog(String id);

    /**
     * 把counts输入数据库
     */
    public void flushCounts(String vlogId, Integer counts);

    /**
     * 通过 fileId 获取视频信息
     */
    Vlog getVlogByFileId(String fileId);

    /**
     * 获取视频统计信息
     */
    Map<String, Object> getVlogStatistics(String fileId);

    /**
     * 获取视频详细信息
     */
    Map<String, Object> getVlogDetailInfo(String fileId);

    /**
     * 获取视频评论列表
     */
    List<Map<String, Object>> getVlogComments(String vlogId);

    /**
     * 获取视频点赞用户列表
     */
    List<Map<String, Object>> getLikedUsers(String vlogId);


    /**
     * 获取视频上传者信息
     * @param fileId 视频文件ID
     * @return 包含上传者姓名和手机号的Map
     */
    Map<String, String> getVlogUploaderInfo(String fileId);

    /**
     * 分页查询视频列表
     * @param page 分页对象
     * @param vlogBO 查询条件
     * @return 分页结果
     */
    IPage<Map<String, Object>> getVlogListByMobile(Page<Map<String, Object>> page, VlogBO vlogBO);


    /**
     * 随机查询视频列表
     * @param limit 查询数量限制
     * @return 随机视频列表
     */
    List<Map<String, Object>> getRandomVlogs(int limit);

    IPage<String> getVlogForUser(Page<IndexVlogVO> page, Long memberId);
    int readVlog(Long memberId, String vlogId);

    List<IndexVlogVO> getIndexVlogList(VlogBO bo);
    Page<IndexVlogVO> getIndexVlogList(VlogBO bo,Page page);

    /**
     * 首页搜索/搜索的vlog列表
     */
    Page<IndexVlogVO> getIndexSearchVlogList(SearchBO bo, Page page);

}
