/*-
 * ~~~~~~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
    .component('entaxyConnectors', {
        bindings: {
            pageTitle: '@'
        },
        template:
        `
          <h2>
            {{$ctrl.pageTitle}}
          </h2>

          <entaxy-table runtime-type="{{$ctrl.runtimeType}}"
                status-name="BundleState" object-name="systemName"
                is-parent-dependent="true" skip-location-update="true"
                population-parent-mbean-name="$ctrl.populationParentMbeanName"></entaxy-table>
        `,
        controller: EntaxyConnectorsController
    })
    .name;

    function EntaxyConnectorsController(workspace, operationsService, jolokia, entaxyLegacyConnectorService) {
        'ngInject';

        let ctrl = this;
        ctrl.runtimeType = Entaxy.RUNTIME_TYPE.CONNECTOR;
        ctrl.workspace = workspace;

        let primaryActions = [ { name: 'Add Legacy Connector', actionFn: () => ctrl.showAddConnectorModal() } ];
        ctrl.config = {
            primaryActions: primaryActions,
            isTableUpdateNeeded: true
        }

        ctrl.$onInit = function () {
            let selectedMbean = workspace.getSelectedMBean();
            ctrl.populationParentMbeanName = selectedMbean.objectName ?
                selectedMbean.objectName : selectedMbean.parent.objectName;
        }

        ctrl.showAddConnectorModal = function() {
            let parentMBeanName = ctrl.populationParentMbeanName ?
                ctrl.populationParentMbeanName : workspace.getSelectedMBeanName();

            let resolve = {
                profileName: () => jolokia.getAttribute(parentMBeanName, 'Name')
            };

            entaxyLegacyConnectorService.openAddLegacyConnectorModal(resolve).then(connectorArgs => {
                addConnector(connectorArgs);
            });
        }

        function addConnector(connectorArgs) {

            let args = entaxyLegacyConnectorService.getArguments(connectorArgs);
            let mbeanName = ctrl.populationParentMbeanName ?
                ctrl.populationParentMbeanName : workspace.getSelectedMBeanName();

            operationsService.executeOperation(mbeanName, { name: 'addConnector' }, args)
            .then(result => {
                Entaxy.notificationSuccess(result);
            }).catch(error => {
                Entaxy.notificationError(error);
            });
        }

        ctrl.dismissAlert = () => ctrl.alert = null;

    }
    EntaxyConnectorsController.$inject = ['workspace', 'operationsService', 'jolokia', 'entaxyLegacyConnectorService'];

})(Entaxy || (Entaxy = {}));
