"use strict";
// Copyright (c) Microsoft Corporation.
// Licensed under the MIT License.
Object.defineProperty(exports, "__esModule", { value: true });
exports.CheckFeatureDeprecationInfoGeneratorTest = void 0;
const ProjectInfoItem_1 = require("../ProjectInfoItem");
const IInfoItemData_1 = require("../IInfoItemData");
const ProjectInfoUtilities_1 = require("../ProjectInfoUtilities");
const StorageUtilities_1 = require("../../storage/StorageUtilities");
var CheckFeatureDeprecationInfoGeneratorTest;
(function (CheckFeatureDeprecationInfoGeneratorTest) {
    CheckFeatureDeprecationInfoGeneratorTest[CheckFeatureDeprecationInfoGeneratorTest["deprecatedBlockOverride"] = 101] = "deprecatedBlockOverride";
    CheckFeatureDeprecationInfoGeneratorTest[CheckFeatureDeprecationInfoGeneratorTest["deprecatedTerrainTexture"] = 102] = "deprecatedTerrainTexture";
    CheckFeatureDeprecationInfoGeneratorTest[CheckFeatureDeprecationInfoGeneratorTest["deprecatedTexture"] = 103] = "deprecatedTexture";
    CheckFeatureDeprecationInfoGeneratorTest[CheckFeatureDeprecationInfoGeneratorTest["jsonParseError"] = 104] = "jsonParseError";
})(CheckFeatureDeprecationInfoGeneratorTest = exports.CheckFeatureDeprecationInfoGeneratorTest || (exports.CheckFeatureDeprecationInfoGeneratorTest = {}));
const DEPRECATED_BLOCKS = ["fletching_table", "smithing_table"];
const DEPRECATED_TEXTURES = [
    "smithing_table_top.png",
    "smithing_table_side1.png",
    "smithing_table_side2.png",
    "fletcher_table_top.png",
    "fletcher_table_side1.png",
    "fletcher_table_side2.png",
];
const DEPRECATED_TEXTURE_ENTRIES = [
    "smithing_table_top",
    "smithing_table_side_a",
    "smithing_table_side_b",
    "fletching_table_top",
    "fletching_table_side1",
    "fletching_table_side2",
];
/***********
 * Generator for Checking Feature Deprecation
 *
 * Will check:
 *  * blocks.json for deprecated block overrides (fletching_table, smithing_table)
 *  * terrain_texture.json for deprecated texture entries
 *  * textures/blocks/ folder for deprecated textures
 *
 */
class CheckFeatureDeprecationInfoGenerator {
    id = "CHECKFEATUREDEPRECATION";
    title = "Check Feature Deprecation";
    getTopicData(topicId) {
        return {
            title: ProjectInfoUtilities_1.default.getTitleFromEnum(CheckFeatureDeprecationInfoGeneratorTest, topicId),
        };
    }
    summarize(info, infoSet) {
        info.deprecatedBlockOverride = infoSet.getSummedDataValue(this.id, CheckFeatureDeprecationInfoGeneratorTest.deprecatedBlockOverride);
        info.deprecatedTerrainTexture = infoSet.getSummedDataValue(this.id, CheckFeatureDeprecationInfoGeneratorTest.deprecatedTerrainTexture);
        info.deprecatedTexture = infoSet.getSummedDataValue(this.id, CheckFeatureDeprecationInfoGeneratorTest.deprecatedTexture);
    }
    async generate(project) {
        const items = [];
        const projItems = project.getItemsCopy();
        for (const item of projItems) {
            if (item.name === "blocks.json") {
                if (!item.isContentLoaded) {
                    await item.loadContent();
                }
                if (!item.primaryFile) {
                    continue;
                }
                if (!item.primaryFile.isContentLoaded) {
                    await item.primaryFile.loadContent();
                }
                const content = item.primaryFile.content;
                if (!content || typeof content !== "string") {
                    continue;
                }
                try {
                    const parsedContent = StorageUtilities_1.default.getJsonObject(item.primaryFile);
                    if (parsedContent) {
                        for (const deprecatedBlock of DEPRECATED_BLOCKS) {
                            if (parsedContent[deprecatedBlock]) {
                                items.push(new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.warning, this.id, CheckFeatureDeprecationInfoGeneratorTest.deprecatedBlockOverride, `Entity [${deprecatedBlock}] will be affected in an upcoming client update.`, item, deprecatedBlock));
                            }
                        }
                    }
                }
                catch (error) {
                    items.push(new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.warning, this.id, CheckFeatureDeprecationInfoGeneratorTest.jsonParseError, `Failed to parse JSON for entity. Error: ${error}`, item));
                }
            }
            if (item.name === "terrain_texture.json") {
                if (!item.isContentLoaded) {
                    await item.loadContent();
                }
                if (!item.primaryFile) {
                    continue;
                }
                if (!item.primaryFile.isContentLoaded) {
                    await item.primaryFile.loadContent();
                }
                const content = item.primaryFile.content;
                if (!content || typeof content !== "string") {
                    continue;
                }
                const parsedContent = StorageUtilities_1.default.getJsonObject(item.primaryFile);
                try {
                    if (parsedContent) {
                        for (const deprecatedTexture of DEPRECATED_TEXTURE_ENTRIES) {
                            if (parsedContent.texture_data[deprecatedTexture]) {
                                items.push(new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.warning, this.id, CheckFeatureDeprecationInfoGeneratorTest.deprecatedTerrainTexture, `Entity [${deprecatedTexture}] will be affected in an upcoming client update.`, item, deprecatedTexture));
                            }
                        }
                    }
                }
                catch (error) {
                    items.push(new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.warning, this.id, CheckFeatureDeprecationInfoGeneratorTest.jsonParseError, `Failed to parse JSON for entity. Error: ${error}`, item));
                }
            }
            if (item.getFolder()?.name === "blocks") {
                if (DEPRECATED_TEXTURES.includes(item.name)) {
                    items.push(new ProjectInfoItem_1.default(IInfoItemData_1.InfoItemType.warning, this.id, CheckFeatureDeprecationInfoGeneratorTest.deprecatedTexture, `Texture [${item.name}] will be affected in an upcoming client update. Please resubmit with no modifications to this texture.`, item, item.name));
                }
            }
        }
        return items;
    }
}
exports.default = CheckFeatureDeprecationInfoGenerator;

//# sourceMappingURL=../../maps/info/projectGenerators/CheckFeatureDeprecationInfoGenerator.js.map
