package cn.iocoder.byzs.module.ai.service.video;

import cn.iocoder.byzs.framework.common.pojo.PageResult;
import cn.iocoder.byzs.module.ai.controller.admin.video.vo.AiVideoDrawReqVO;
import cn.iocoder.byzs.module.ai.controller.admin.video.vo.AiVideoPageReqVO;
import cn.iocoder.byzs.module.ai.controller.admin.video.vo.AiVideoPublicPageReqVO;
import cn.iocoder.byzs.module.ai.controller.admin.video.vo.AiVideoUpdateReqVO;
import cn.iocoder.byzs.module.ai.dal.dataobject.model.AiModelDO;
import cn.iocoder.byzs.module.ai.dal.dataobject.video.AiVideoDO;
import jakarta.validation.Valid;

import java.util.List;

/**
 * AI 视频 Service 接口
 *
 * @author fansili
 */
public interface AiVideoService {

    /**
     * 获取【我的】绘图分页
     *
     * @param userId 用户编号
     * @param pageReqVO 分页条件
     * @return 绘图分页
     */
    PageResult<AiVideoDO> getVideoPageMy(Long userId, AiVideoPageReqVO pageReqVO);

    void executeDrawVideo(AiVideoDO video, AiVideoDrawReqVO reqVO, AiModelDO model);
    /**
     * 获取公开的绘图分页
     *
     * @param pageReqVO 分页条件
     * @return 绘图分页
     */
    PageResult<AiVideoDO> getVideoPagePublic(AiVideoPublicPageReqVO pageReqVO);

    /**
     * 获得绘图记录
     *
     * @param id 绘图编号
     * @return 绘图记录
     */
    AiVideoDO getVideo(Long id);

    /**
     * 获得绘图列表
     *
     * @param ids 绘图编号数组
     * @return 绘图记录列表
     */
    List<AiVideoDO> getVideoList(List<Long> ids);

    /**
     * 绘制图片
     *
     * @param userId 用户编号
     * @param drawReqVO 绘制请求
     * @return 绘画编号
     */
    Long drawVideo(Long userId, AiVideoDrawReqVO drawReqVO);

    /**
     * 删除【我的】绘画记录
     *
     * @param id 绘画编号
     * @param userId 用户编号
     */
    void deleteVideoMy(Long id, Long userId);

    /**
     * 获得绘画分页
     *
     * @param pageReqVO 分页查询
     * @return 绘画分页
     */
    PageResult<AiVideoDO> getVideoPage(AiVideoPageReqVO pageReqVO);

    /**
     * 更新绘画
     *
     * @param updateReqVO 更新信息
     */
    void updateVideo(@Valid AiVideoUpdateReqVO updateReqVO);

    /**
     * 删除绘画
     *
     * @param id 编号
     */
    void deleteVideo(Long id);

}
