package com.easyagents.agent.runtime.tool.operate;

/**
 * 工作区资源配额。
 *
 * <p>所有大小均以字节计。小于等于零的值表示对应维度不限制，便于通用 Runtime 保持兼容，
 * 生产系统应由业务侧显式传入有界配置。
 */
public final class WorkspaceQuotaLimits {

    private final long maxTotalSize;
    private final long maxSingleFileSize;
    private final long maxFileCount;
    private final long maxReadSize;

    /**
     * 创建工作区配额。
     *
     * @param maxTotalSize 工作区普通文件总字节数
     * @param maxSingleFileSize 单个普通文件最大字节数
     * @param maxFileCount 工作区文件与目录条目最大数量，不包含工作区根
     * @param maxReadSize 单次读取文件最大字节数
     */
    public WorkspaceQuotaLimits(long maxTotalSize,
                                long maxSingleFileSize,
                                long maxFileCount,
                                long maxReadSize) {
        this.maxTotalSize = maxTotalSize;
        this.maxSingleFileSize = maxSingleFileSize;
        this.maxFileCount = maxFileCount;
        this.maxReadSize = maxReadSize;
    }

    /**
     * 创建无限制配额。
     *
     * @return 无限制配额
     */
    public static WorkspaceQuotaLimits unlimited() {
        return new WorkspaceQuotaLimits(0, 0, 0, 0);
    }

    /**
     * 获取工作区总量上限。
     *
     * @return 总字节数上限
     */
    public long getMaxTotalSize() {
        return maxTotalSize;
    }

    /**
     * 获取单文件上限。
     *
     * @return 单文件字节数上限
     */
    public long getMaxSingleFileSize() {
        return maxSingleFileSize;
    }

    /**
     * 获取工作区条目数量上限。
     *
     * @return 文件与目录条目数量上限
     */
    public long getMaxFileCount() {
        return maxFileCount;
    }

    /**
     * 获取单次读取上限。
     *
     * @return 读取字节数上限
     */
    public long getMaxReadSize() {
        return maxReadSize;
    }
}
