package tech.easyflow.ai.publish;

import tech.easyflow.ai.enums.PublishStatus;
import tech.easyflow.approval.entity.vo.ApprovalSubmitRequest;

import java.math.BigInteger;
import java.util.Map;

/**
 * AI 资源生命周期处理器。
 */
public interface AiResourceLifecycleHandler {

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

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

    /**
     * 写入待审批状态。
     *
     * @param resourceId 资源 ID
     * @param publishStatus 待写入的发布状态
     * @param instanceId 审批实例 ID
     */
    void updatePendingState(BigInteger resourceId, PublishStatus publishStatus, BigInteger instanceId);

    /**
     * 执行动作真正生效后的资源更新与副作用。
     *
     * @param actionType 动作类型
     * @param resourceId 资源 ID
     * @param resourceSnapshot 审批冻结快照
     * @param operatorId 操作人 ID
     */
    void applyApprovedAction(String actionType, BigInteger resourceId, Map<String, Object> resourceSnapshot, BigInteger operatorId);

    /**
     * 按提交前真实状态恢复资源状态。
     *
     * @param resourceId 资源 ID
     * @param previousStatus 提交前状态
     */
    void restoreState(BigInteger resourceId, PublishStatus previousStatus);
}
