package com.ycwl.basic.service.pc;

import com.github.pagehelper.PageInfo;
import com.ycwl.basic.model.pc.source.entity.SourceEntity;
import com.ycwl.basic.model.pc.source.req.SourceReqQuery;
import com.ycwl.basic.model.pc.source.resp.SourceRespVO;
import com.ycwl.basic.utils.ApiResponse;

import java.io.File;
import java.util.List;
import java.util.Map;

/**
 * @Author：longbinbin
 * @Date：2024/12/3 15:47
 */
public interface SourceService {
    ApiResponse<PageInfo<SourceRespVO>> pageQuery(SourceReqQuery sourceReqQuery);
    ApiResponse<List<SourceRespVO>> list(SourceReqQuery sourceReqQuery);
    ApiResponse<SourceRespVO> getById(Long id, Long userId);
    ApiResponse<Integer> add(SourceEntity source);
    ApiResponse<Integer> deleteById(Long id);
    ApiResponse<Integer> update(SourceEntity source);

    ApiResponse cutVideo(Long id);
    String uploadAndUpdateUrl(Long id, File file);

    /**
     * 根据sourceId列表查询关联的faceId
     * @param sourceIds sourceId列表
     * @return sourceId -> faceId 的映射
     */
    ApiResponse<Map<Long, Long>> getFaceIdsBySourceIds(List<Long> sourceIds);

    /**
     * 根据faceId分页查询关联的source记录
     * @param sourceReqQuery 查询参数（需设置faceId）
     * @return 分页结果
     */
    ApiResponse<PageInfo<SourceRespVO>> pageByFaceId(SourceReqQuery sourceReqQuery);

    /**
     * 管理员软删除（取消）关联记录
     * @param id member_source 记录 ID
     * @return 操作结果
     */
    ApiResponse<Void> cancelRelation(Long id);

    /**
     * 管理员恢复已取消的关联记录
     * @param id member_source 记录 ID
     * @return 操作结果
     */
    ApiResponse<Void> reactivateRelation(Long id);

    /**
     * 分页查询已取消的关联记录（管理员用）
     * @param sourceReqQuery 查询参数（需设置faceId）
     * @return 分页结果
     */
    ApiResponse<PageInfo<SourceRespVO>> pageDeletedByFaceId(SourceReqQuery sourceReqQuery);
}
