"use strict";
var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    var desc = Object.getOwnPropertyDescriptor(m, k);
    if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
      desc = { enumerable: true, get: function() { return m[k]; } };
    }
    Object.defineProperty(o, k2, desc);
}) : (function(o, m, k, k2) {
    if (k2 === undefined) k2 = k;
    o[k2] = m[k];
}));
var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
    Object.defineProperty(o, "default", { enumerable: true, value: v });
}) : function(o, v) {
    o["default"] = v;
});
var __importStar = (this && this.__importStar) || function (mod) {
    if (mod && mod.__esModule) return mod;
    var result = {};
    if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
    __setModuleDefault(result, mod);
    return result;
};
Object.defineProperty(exports, "__esModule", { value: true });
exports.ITEM_POOL_TYPE_TO_COLLECTIBLE_TYPES_SET = void 0;
const cachedEnumValues_1 = require("../arrays/cachedEnumValues");
const itemPoolsJSON = __importStar(require("../data/itempools.json"));
const types_1 = require("../functions/types");
const itemPoolTypeToItemPoolName_1 = require("../maps/itemPoolTypeToItemPoolName");
exports.ITEM_POOL_TYPE_TO_COLLECTIBLE_TYPES_SET = (() => {
    const itemPoolTypeToCollectibleTypes = {};
    for (const itemPoolType of cachedEnumValues_1.ITEM_POOL_TYPE_VALUES) {
        const itemPoolJSON = getItemPoolJSON(itemPoolType);
        if (itemPoolJSON === undefined) {
            itemPoolTypeToCollectibleTypes[itemPoolType] = new Set();
        }
        else {
            const collectibleTypesSet = new Set();
            for (const itemPoolJSONElement of itemPoolJSON.Item) {
                const collectibleTypeInt = (0, types_1.parseIntSafe)(itemPoolJSONElement.$.Id);
                if (collectibleTypeInt === undefined) {
                    error(`Failed to parse a collectible type in the "itempools.json" file: ${itemPoolJSONElement.$.Id}`);
                }
                const collectibleType = (0, types_1.asCollectibleType)(collectibleTypeInt);
                collectibleTypesSet.add(collectibleType);
            }
            itemPoolTypeToCollectibleTypes[itemPoolType] = collectibleTypesSet;
        }
    }
    return itemPoolTypeToCollectibleTypes;
})();
function getItemPoolJSON(itemPoolType) {
    const itemPoolName = itemPoolTypeToItemPoolName_1.ITEM_POOL_TYPE_TO_ITEM_POOL_NAME[itemPoolType];
    const itemPoolsJSONArray = itemPoolsJSON.ItemPools.Pool;
    return itemPoolsJSONArray.find((itemPoolJSON) => itemPoolJSON.$.Name === itemPoolName);
}
