package ink.wgink.module.file.media.service.video;

import ink.wgink.module.file.media.pojo.dtos.video.VideoDTO;
import ink.wgink.module.file.media.pojo.dtos.video.VideoUploadSuccessDTO;
import ink.wgink.module.file.media.pojo.vos.video.VideoVO;
import ink.wgink.pojo.ListPage;
import ink.wgink.pojo.result.SuccessResultList;
import org.springframework.web.multipart.MultipartFile;
import org.springframework.web.servlet.mvc.method.annotation.SseEmitter;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.File;
import java.util.List;
import java.util.Map;

/**
 * When you feel like quitting. Think about why you started
 * 当你想要放弃的时候，想想当初你为何开始
 *
 * @ClassName: IVideoService
 * @Description: 视频
 * @Author: WangGeng
 * @Date: 2021/6/8 22:12
 * @Version: 1.0
 **/
public interface IVideoService {

    String VIDEO_PATH = "videos";

    /**
     * 保存
     *
     * @param videoVO
     * @return
     */
    VideoUploadSuccessDTO save(VideoVO videoVO);

    /**
     * 保存
     *
     * @param token
     * @param videoVO
     * @return
     */
    VideoUploadSuccessDTO save(String token, VideoVO videoVO);

    /**
     * 删除
     *
     * @param ids
     */
    void remove(List<String> ids);

    /**
     * 删除（物理）
     *
     * @param ids
     */
    void delete(List<String> ids);

    /**
     * 更新转码信息
     *
     * @param fileId
     */
    void updateConvert(String fileId);

    /**
     * 更新转码信息
     *
     * @param fileId      文件ID
     * @param convertFile 转码文件
     */
    void updateConvert(String fileId, File convertFile);

    /**
     * 上传视频
     *
     * @param video
     * @return
     */
    VideoUploadSuccessDTO upload(MultipartFile video);

    /**
     * 上传视频
     *
     * @param token
     * @param video
     * @return
     */
    VideoUploadSuccessDTO upload(String token, MultipartFile video);

    /**
     * 转换进度列表
     *
     * @return
     */
    SseEmitter getConvertProgress();

    /**
     * 详情
     *
     * @param params
     * @return
     */
    VideoDTO get(Map<String, Object> params);

    /**
     * 详情
     *
     * @param fileId 文件ID
     * @return
     */
    VideoDTO get(String fileId);

    /**
     * 详情
     *
     * @param fileMd5 文件MD5值
     * @return
     */
    VideoDTO getByMd5(String fileMd5);

    /**
     * 列表
     *
     * @param params
     * @return
     */
    List<VideoDTO> list(Map<String, Object> params);

    /**
     * 分页
     *
     * @param page
     * @return
     */
    SuccessResultList<List<VideoDTO>> listPage(ListPage page);

    /**
     * 文件下载
     *
     * @param request
     * @param response
     * @param isOpen
     * @param fileId
     */
    void downLoad(HttpServletRequest request, HttpServletResponse response, Boolean isOpen, String fileId);
}
