/*-
 * ~~~~~~licensing~~~~~~
 * entaxy-management-plugin
 * ==========
 * Copyright (C) 2020 - 2025 EmDev LLC
 * ==========
 * You may not use this file except in accordance with the License Terms of the Copyright
 * Holder located at: https://entaxy.ru/eula . All copyrights, all intellectual property
 * rights to the Software and any copies are the property of the Copyright Holder. Unless
 * it is explicitly allowed the Copyright Holder, the User is prohibited from using the
 * Software for commercial purposes to provide services to third parties.
 * 
 * The Copyright Holder hereby declares that the Software is provided on an "AS IS".
 * Under no circumstances does the Copyright Holder guarantee or promise that the
 * Software provided by him will be suitable or not suitable for the specific purposes
 * of the User, that the Software will meet all commercial and personal subjective
 * expectations of the User, that the Software will work properly, without technical
 * errors, quickly and uninterruptedly.
 * 
 * Under no circumstances shall the Copyright Holder or its Affiliates is not liable
 * to the User for any direct or indirect losses of the User, his expenses or actual
 * damage, including, downtime; loss of bussines; lost profit; lost earnings; loss
 * or damage to data, property, etc.
 * ~~~~~~/licensing~~~~~~
 */

var Entaxy;
(function (Entaxy) {
    Entaxy._module.factory('entaxyConnectorsService', ['jolokia', 'jolokiaService', '$q',
        function(jolokia, jolokiaService, $q) {
            return {
                getConnectors: function (profileName) {
                    return getConnectors(profileName);
                }
            };

//            let mbeanName = ctrl.workspace.getSelectedMBeanName();
//
//            let parsedMbean = Core.parseMBean(mbeanName);
//            let profileName = parsedMbean.attributes.profile;
//
//            entaxyConnectorsService.getConnectors(profileName).then(connectors => {
//                ctrl.connectors = connectors;
//                ctrl.viewedConnectors = connectors;
//                ctrl.toolbarConfig.filterConfig.resultsCount = connectors.length;
//            });

            function getConnectors(profileName) {
                var entaxyJmxDomain = localStorage['entaxyJmxDomain'] || "ru.entaxy.esb";

                return $q((resolve, reject) => {
                    jolokia.list(entaxyJmxDomain,
                        Core.onSuccess((response) => {
                            let connectors = [];
                            let promises = [];
                            let entaxyDomain = response;

                            angular.forEach(entaxyDomain, function (mbean, mbeanNameWithoutDomain) {
                                let mbeanName = entaxyJmxDomain + ':' + mbeanNameWithoutDomain;
                                let parsedMbean = Core.parseMBean(mbeanName);

                                if (parsedMbean.attributes.connector && parsedMbean.attributes.profile === profileName) {

                                    let connectorName = parsedMbean.attributes.connector;

                                    let promise = jolokiaService.getAttribute(mbeanName, 'BundleState');
                                    promise.then((response) =>
                                        connectors.push({name: connectorName, status: response, mbeanName: mbeanName}));
                                    promises.push(promise);
                                }
                            });

                            $q.all(promises).then(() => resolve(connectors));
                        },
                        {
                            error: (response) => Entaxy.log.info('ERROR ' + JSON.stringify(response))
                        })
                    );
                });
            }
        }
    ])
})(Entaxy || (Entaxy = {}));
