package tech.easyflow.approval.service;

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

import java.math.BigInteger;

/**
 * 审批资源处理器。
 */
public interface ApprovalSubjectHandler {

    /**
     * 当前处理器支持的资源类型。
     *
     * @return 资源类型编码
     */
    String resourceType();

    /**
     * 构建审批提交请求。
     *
     * @param resourceId 资源 ID
     * @param actionType 动作类型
     * @param operatorId 操作人 ID
     * @return 审批请求
     */
    ApprovalSubmitRequest buildSubmitRequest(BigInteger resourceId, String actionType, BigInteger operatorId);

    /**
     * 校验资源是否已发布。
     *
     * @param identifier 资源标识（ID 或别名）
     * @param denyMessage 拒绝提示
     */
    void assertPublishedAccess(Object identifier, String denyMessage);
}
