package shop.alien.second.service;

import shop.alien.entity.SecondVideoTask;
import shop.alien.entity.second.SecondGoods;
import shop.alien.entity.second.vo.SecondGoodsVo;

import java.util.List;

/**
 * 二手商品审核服务接口
 * 负责商品的图片、文本、视频审核相关业务逻辑
 */
public interface SecondGoodsAuditService {

    /**
     * 执行内容审核（图片、文本和视频）
     * @param goodsDTO 商品信息DTO
     * @param goods 商品实体
     * @throws Exception 审核过程中可能抛出的异常
     */
    void performContentReview(SecondGoodsVo goodsDTO, SecondGoods goods) throws Exception;

    /**
     * 执行图片审核
     * @param goods 商品信息
     * @param goodsDTO 商品DTO信息
     * @return 审核结果，true表示通过，false表示不通过
     * @throws Exception 审核过程中可能抛出的异常
     */
    boolean performImageReviews(SecondGoods goods, SecondGoodsVo goodsDTO) throws Exception;

    /**
     * 执行文本审核
     * @param goods 商品信息
     * @param goodsDTO 商品DTO信息
     * @return 审核结果，true表示通过，false表示不通过
     * @throws Exception 审核过程中可能抛出的异常
     */
    boolean performTextReview(SecondGoods goods, SecondGoodsVo goodsDTO) throws Exception;

    /**
     * 执行视频审核
     * @param goods 商品信息
     * @param goodsDTO 商品DTO信息
     * @return 视频审核任务ID列表
     */
    List<String> performVideoReviews(SecondGoods goods, SecondGoodsVo goodsDTO);

    /**
     * 处理视频审核结果
     * @param task 视频审核任务
     */
    void processVideoModerationResult(SecondVideoTask task);

    /**
     * 审核通过后上架商品
     * @param goods 商品信息
     */
    void approveAndListGoods(SecondGoods goods);

    /**
     * 创建商品审核记录
     * @param goods 商品信息
     * @param failReason 审核失败原因
     * @param goodsStatus 商品状态
     */
    void createGoodsAudit(SecondGoods goods, String failReason, Integer goodsStatus);

    /**
     * 从图片URL列表中提取视频URL
     * @param imageUrls 图片URL列表
     * @return 视频URL列表
     */
    List<String> extractVideoUrls(List<String> imageUrls);

    /**
     * 判断URL是否为视频地址
     * @param url 输入URL
     * @return 是否为视频地址
     */
    boolean isVideoUrl(String url);

    boolean performSecondRoundReview(SecondGoods goods, SecondGoodsVo goodsDTO);

    /**
     * 获取AI商品审核结果
     * 查询所有状态为处理中的AI审核任务，并更新审核结果
     * @return 处理结果
     */
    String getAiGoodsCheckResult();

    /**
     * 商品审核通过后的上架处理（包含风控检查）
     * @param goods 商品信息
     */
    void handleGoodsApprovalSuccess(SecondGoods goods);
}

