"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.ToolFactory = void 0;
const PriceTool_1 = require("./PriceTool");
const BalanceTool_1 = require("./BalanceTool");
const AddressTool_1 = require("./AddressTool");
const DollarToTokenTool_1 = require("./DollarToTokenTool");
const TrendingNewsTool_1 = require("./TrendingNewsTool");
const TrendingTokenTool_1 = require("./TrendingTokenTool");
const ZapCallDataGeneratorTool_1 = require("./ZapCallDataGeneratorTool");
const ToolNames_1 = require("./ToolNames");
const PricePredictionTool_1 = require("./PricePredictionTool");
const BridgeLinkGeneratorTool_1 = require("./BridgeLinkGeneratorTool");
const SwapLinkGeneratorTool_1 = require("./SwapLinkGeneratorTool");
const SentimentTool_1 = require("./SentimentTool");
const WebSearchTool_1 = require("./WebSearchTool");
const DefiPositionsTool_1 = require("./DefiPositionsTool");
const SheluderTool_1 = require("./SheluderTool");
const PerformZapTool_1 = require("./PerformZapTool");
const RagOverDocsTool_1 = require("./RagOverDocsTool");
const PoolTool_1 = require("./PoolTool");
const RequestChainChangeTool_1 = require("./RequestChainChangeTool");
const ChangeChainTool_1 = require("./ChangeChainTool");
const ShowBalanceUITool_1 = require("./ShowBalanceUITool");
class ToolFactory {
    constructor() {
        this.toolsDict = {
            [ToolNames_1.ToolNames.PriceTool]: new PriceTool_1.PriceTool().tool,
            [ToolNames_1.ToolNames.BalanceTool]: new BalanceTool_1.BalanceTool().tool,
            [ToolNames_1.ToolNames.TokenAddressTool]: new AddressTool_1.TokenAddressTool().tool,
            [ToolNames_1.ToolNames.DollarToTokenAmountTool]: new DollarToTokenTool_1.DollarToTokenAmountTool().tool,
            [ToolNames_1.ToolNames.TrendingNewsTool]: new TrendingNewsTool_1.TrendingNewsTool().tool,
            [ToolNames_1.ToolNames.TrendingTokenTool]: new TrendingTokenTool_1.TrendingTokenTool().tool,
            [ToolNames_1.ToolNames.ZapCallDataGeneratorTool]: new ZapCallDataGeneratorTool_1.ZapCallDataGeneratorTool().tool,
            [ToolNames_1.ToolNames.PricePredictionTool]: new PricePredictionTool_1.PricePredictionTool().tool,
            [ToolNames_1.ToolNames.BridgeLinkGeneratorTool]: new BridgeLinkGeneratorTool_1.BridgeLinkGeneratorTool().tool,
            [ToolNames_1.ToolNames.SwapLinkGeneratorTool]: new SwapLinkGeneratorTool_1.SwapLinkGeneratorTool().tool,
            [ToolNames_1.ToolNames.SentimentTool]: new SentimentTool_1.SentimentTool().tool,
            [ToolNames_1.ToolNames.WebSearchTool]: new WebSearchTool_1.WebSearchTool().tool,
            [ToolNames_1.ToolNames.DefiPositionsTool]: new DefiPositionsTool_1.DefiPositionsTool().tool,
            [ToolNames_1.ToolNames.SheluderTool]: new SheluderTool_1.SheluderTool().tool,
            [ToolNames_1.ToolNames.GetAllSchedulesTool]: new SheluderTool_1.GetAllSchedulesTool().tool,
            [ToolNames_1.ToolNames.PerformZapTool]: new PerformZapTool_1.PerformZapTool().tool,
            [ToolNames_1.ToolNames.RagOverDocsTool]: new RagOverDocsTool_1.RagOverDocsTool().tool,
            [ToolNames_1.ToolNames.PoolTool]: new PoolTool_1.PoolTool().tool,
            [ToolNames_1.ToolNames.RequestChainChangeTool]: new RequestChainChangeTool_1.RequestChainChangeTool().tool,
            [ToolNames_1.ToolNames.ChangeChainTool]: new ChangeChainTool_1.ChangeChainTool().tool,
            [ToolNames_1.ToolNames.ShowBalanceUITool]: new ShowBalanceUITool_1.ShowBalanceUITool().tool,
        };
    }
    getTool(toolName) {
        return this.toolsDict[toolName];
    }
    getTools() {
        return Object.values(this.toolsDict);
    }
    getToolNames() {
        return Object.keys(this.toolsDict);
    }
    getToolByNames(toolNames) {
        // return toolNames.map(toolName => this.getTool(toolName));
        let tool_name_dict = {};
        toolNames.forEach(toolName => {
            tool_name_dict[toolName.toString()] = this.getTool(toolName);
        });
        return tool_name_dict;
    }
}
exports.ToolFactory = ToolFactory;
