package com.lesingle.creation.service;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import com.lesingle.creation.dto.ai3d.AI3DTaskQueryDTO;
import com.lesingle.creation.dto.ai3d.CreateAI3DTaskDTO;
import com.lesingle.creation.entity.AI3DTask;
import com.lesingle.creation.vo.ai3d.AI3DTaskVO;

/**
 * AI 3D 任务服务接口
 */
public interface AI3DTaskService extends IService<AI3DTask> {

    /**
     * 创建 AI 3D 任务
     * @param dto 创建任务请求
     * @param tenantId 租户 ID
     * @param userId 用户 ID
     * @return 任务详情
     */
    AI3DTaskVO create(CreateAI3DTaskDTO dto, Long tenantId, Long userId);

    /**
     * 获取任务详情
     * @param id 任务 ID
     * @param tenantId 租户 ID
     * @return 任务详情
     */
    AI3DTaskVO getDetail(Long id, Long tenantId);

    /**
     * 分页查询任务列表
     * @param queryDTO 查询参数
     * @param tenantId 租户 ID
     * @param userId 用户 ID（可选，查询自己的任务）
     * @return 任务列表
     */
    Page<AI3DTaskVO> pageQuery(AI3DTaskQueryDTO queryDTO, Long tenantId, Long userId);

    /**
     * 取消任务
     * @param id 任务 ID
     * @param tenantId 租户 ID
     */
    void cancel(Long id, Long tenantId);

    /**
     * 重试失败的任务
     * @param id 任务 ID
     * @param tenantId 租户 ID
     * @return 任务详情
     */
    AI3DTaskVO retry(Long id, Long tenantId);

    /**
     * 删除 AI 3D 任务
     * @param id 任务 ID
     * @param tenantId 租户 ID
     */
    void delete(Long id, Long tenantId);
}
