/*-
 * ~~~~~~licensing~~~~~~
 * entaxy-cicd-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 EntaxyCICD;
(function (EntaxyCICD) {
    EntaxyCICD._module.component('entaxyCiCdAddObjectsModal', {
        bindings: {
            modalInstance: '<',
            resolve: '<'
        },
        template:
        `
          <div class="entaxy-modal-container">
            <div class="modal-header">
              <button type="button" class="close" aria-label="Close" ng-click="$ctrl.cancel()">
                <span class="pficon pficon-close" aria-hidden="true"></span>
              </button>
              <h4 class="modal-title">{{$ctrl.modalTitle}}</h4>
            </div>
            
            <div class="modal-body">
              <div ng-if="$ctrl.resolve.objects">
                <div class="add-objects-message-container">
                  {{$ctrl.message}}
                </div>
                <entaxy-expandable-list items="$ctrl.resolve.objects" use-toolbar="false" show-select-box="true"
                      on-check-box-change-fn="$ctrl.changeSelected">
                </entaxy-expandable-list>
              </div>
              <entaxy-ci-cd-objects-select change-selected="$ctrl.changeSelected" ng-if="!$ctrl.resolve.objects"
                    excluded-object-ids="$ctrl.resolve.excludedObjectIds"></entaxy-ci-cd-objects-select>
            </div>
            <div class="modal-footer">
              <button type="button" class="btn btn-default" ng-click="$ctrl.cancel()"
                    ng-if="$ctrl.includeSkip">Skip</button>
              <button type="submit" class="btn btn-primary" ng-click="$ctrl.save()">Add</button>
            </div>
          </div>
        `,
        controller: entaxyCICDAddObjectsModalController
    })
    .name;

    function entaxyCICDAddObjectsModalController() {

        let ctrl = this;

        ctrl.$onInit = function() {
            ctrl.modalTitle = 'Add Objects to the Project: ' + ctrl.resolve.project;

            ctrl.selected = {};

            if (ctrl.resolve.objects) {
                ctrl.message = 'You may also want to add optional related objects:';
                ctrl.includeSkip = true;
            }
        }

        ctrl.changeSelected = function (item) {

            if (ctrl.resolve.objects) {
                if (item.relatedTo && item.relatedTo.length > 1) {
                    let relatedToExcludeParent = item.relatedTo.filter(objectId => objectId !== item.parent);
                    relatedToExcludeParent.forEach(objectId => {
                        let object = ctrl.resolve.objects.find(it => it.name === objectId);
                        let relatedObject = object.sublist.find(it => it.name === item.name);
                        relatedObject.selected = item.selected;
                    });
                }
            }

            if (ctrl.selected[item.fullId]) {
                delete ctrl.selected[item.fullId];
            } else {
                ctrl.selected[item.fullId] = item;
            }
        }

        ctrl.save = function () {
            ctrl.modalInstance.close(ctrl.selected);
        }

        ctrl.cancel = function(reason) {
            ctrl.modalInstance.dismiss(reason);
        }
    }

})(EntaxyCICD || (EntaxyCICD = {}));
