package com.lingniu.ingest.protocol.gb32960.codec.profile;

import com.lingniu.ingest.protocol.gb32960.codec.InfoBlockParser;

import java.util.Collections;
import java.util.List;
import java.util.Map;

/**
 * Vendor 扩展套件目录：从套件名映射到该套件包含的 {@link InfoBlockParser} 列表。
 *
 * <p>Catalog 在启动时由 {@code Gb32960AutoConfiguration} 一次性构建并注入到
 * {@link Gb32960ProfileRegistry}，运行期不可变。每个 entry 代表一个**已实现的**厂商扩展
 * 协议（如广东燃料电池汽车示范规范），其 parser 集合会在选中时**追加**到默认标准 parser
 * 集合之上，组成完整的 profile registry。
 *
 * <p>当前内置 key：
 * <ul>
 *   <li>{@code guangdong-fc} —— 广东燃料电池汽车示范规范 0x30~0x34、0x80
 * </ul>
 */
public final class VendorExtensionCatalog {

    private final Map<String, List<InfoBlockParser>> extensions;

    public VendorExtensionCatalog(Map<String, List<InfoBlockParser>> extensions) {
        // 只冻结顶层 map；parser 实例本身按无状态单例使用，不应在运行期修改。
        this.extensions = Map.copyOf(extensions);
    }

    /** 已注册的全部 vendor 扩展名集合。 */
    public java.util.Set<String> names() {
        return extensions.keySet();
    }

    /** 取指定 vendor 扩展套件的 parser 列表；不存在返回空列表。 */
    public List<InfoBlockParser> parsersFor(String name) {
        List<InfoBlockParser> list = extensions.get(name);
        return list == null ? Collections.emptyList() : list;
    }
}
