package com.easyagents.flow.core.chain.repository;

import java.io.Serializable;
import java.util.Objects;

/**
 * 已分块保存的循环输入轻量引用。
 *
 * <p>循环节点按序读取分块；其他业务节点在参数读取边界会透明还原为与原输入等价的列表。</p>
 */
public final class LoopInputReference implements Serializable {

    private static final long serialVersionUID = 1L;
    private static final String REFERENCE_TYPE =
            "easyflow.loop-input.v1";

    private final String resultId;
    private final int itemCount;

    /**
     * 创建循环输入引用。
     *
     * @param resultId 循环输入结果 ID
     * @param itemCount 输入元素数量
     */
    public LoopInputReference(String resultId, int itemCount) {
        this.resultId = Objects.requireNonNull(
                resultId, "resultId must not be null");
        if (itemCount < 0) {
            throw new IllegalArgumentException(
                    "itemCount must not be negative");
        }
        this.itemCount = itemCount;
    }

    /**
     * 获取循环输入结果 ID。
     *
     * @return 结果 ID
     */
    public String getResultId() {
        return resultId;
    }

    /**
     * 获取输入元素数量。
     *
     * @return 元素数量
     */
    public int getItemCount() {
        return itemCount;
    }

    /**
     * 获取跨异步审计边界使用的稳定引用类型。
     *
     * @return 引用类型
     */
    public String getReferenceType() {
        return REFERENCE_TYPE;
    }
}
