package com.fs.audit.service;


import com.fs.audit.chain.AuditResult;
import com.fs.audit.domain.Audit;
import com.fs.audit.domain.AuditFlow;
import com.fs.audit.dto.AuditRequestDTO;
import com.fs.audit.dto.CreateAuditRequestDTO;
import com.fs.audit.dto.CustomerServicePendingAuditDTO;
import com.fs.audit.vo.AuditDetailVO;
import com.fs.audit.vo.QueryPendingAuditVO;

import java.util.List;

/**
 * 审核服务接口
 */
public interface AuditService {

    /**
     * 创建审核实例
     */
    Long createAudit(CreateAuditRequestDTO request);

    /**
     * 获取指定客服的待办审核列表
     * @param param 参数
     * @return 待办审核列表
     */
    List<CustomerServicePendingAuditDTO> getPendingAuditsByCustomerServiceId(QueryPendingAuditVO param);
    List<CustomerServicePendingAuditDTO> getPendingTaskAuditsByCustomerServiceId(QueryPendingAuditVO param);

    /**
     * 执行审核
     */
    AuditResult doAudit(AuditRequestDTO request);

    /**
     * 获取审核实例
     */
    Audit getAudit(Long auditId);

    /**
     * 根据业务ID获取审核实例
     */
    Audit getAuditByBusinessId(String businessId, String businessType);

    /**
     * 获取审核流程记录
     */
    List<AuditFlow> getAuditFlows(Long auditId);

    /**
     * 获取待我审核的列表
     */
    List<Audit> getPendingAuditsByUserId(Long userId);

    /**
     * 获取我发起的审核列表
     */
    List<Audit> getMyInitiatedAudits(Long userId);

    /**
     * 获取审核详情（通用接口）
     * 根据审核实例ID查询审核信息、审核流程和业务数据
     * @param auditId 审核实例ID
     * @return 审核详情
     */
    AuditDetailVO<?> getAuditDetail(Long auditId);

    Long getPendingAuditsCount(QueryPendingAuditVO param);


}

