package tech.easyflow.approval.service;

import tech.easyflow.approval.entity.ApprovalInstance;
import tech.easyflow.approval.entity.vo.ApprovalSubmitRequest;

import java.math.BigInteger;

/**
 * 审批实例服务。
 */
public interface ApprovalInstanceService {

    /**
     * 发起审批。
     *
     * @param request 发起审批请求
     * @return 审批实例ID
     */
    BigInteger submitApproval(ApprovalSubmitRequest request);

    /**
     * 通过审批。
     *
     * @param instanceId 审批实例ID
     * @param comment 审批意见
     * @param operatorId 操作人ID
     */
    void approve(BigInteger instanceId, String comment, BigInteger operatorId);

    /**
     * 驳回审批。
     *
     * @param instanceId 审批实例ID
     * @param comment 审批意见
     * @param operatorId 操作人ID
     */
    void reject(BigInteger instanceId, String comment, BigInteger operatorId);

    /**
     * 撤回审批。
     *
     * @param instanceId 审批实例ID
     * @param comment 撤回说明
     * @param operatorId 操作人ID
     */
    void revoke(BigInteger instanceId, String comment, BigInteger operatorId);

    /**
     * 判断资源是否存在未结束审批实例。
     *
     * @param resourceType 资源类型
     * @param resourceId 资源 ID
     * @return 存在未结束实例时返回 true
     */
    boolean existsActiveInstance(String resourceType, BigInteger resourceId);

    /**
     * 根据实例 ID 查询实例。
     *
     * @param instanceId 审批实例 ID
     * @return 审批实例
     */
    ApprovalInstance getById(BigInteger instanceId);
}
