package tech.easyflow.agent.runtime.lock;

import java.math.BigInteger;

/**
 * Agent 会话级运行锁。
 */
public interface AgentRunLock {

    /**
     * 获取指定 Agent 会话的运行锁。
     *
     * @param agentId Agent ID
     * @param sessionId 运行时会话 ID
     * @return 锁句柄
     */
    Handle acquire(BigInteger agentId, String sessionId);

    /**
     * Agent 运行锁句柄。
     */
    interface Handle extends AutoCloseable {

        /**
         * 续期锁。
         *
         * @return 续期成功时为 true
         */
        boolean renew();

        /**
         * 释放锁。
         */
        void release();

        @Override
        default void close() {
            release();
        }
    }
}
