/*-
 * ~~~~~~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('entaxyFilePanel', {
        bindings: {
            items: '=',
            selectedItems: '<',
            view: '<',
            changeSelectionFn: '<',
            openFn: '<',
            resourceContextMenuOptions: '<',
            admResourceContextMenuOptions: '<',
            folderContextMenuOptions: '<'
        },
        template:
        `
          <div class="file-panel no-selection" ng-class="{'tile-theme': $ctrl.view === 'tiles', 'list-theme': $ctrl.view === 'list'}">
            <div ng-class="{'tile': $ctrl.view === 'tiles', 'list': $ctrl.view === 'list', 'active': $ctrl.isActive(item)}"
                  ng-repeat="item in $ctrl.items" ng-click="$ctrl.changeSelection($event, item)" ng-dblclick="$ctrl.open(item)"
                  context-menu="$ctrl.considerChangingSelection(item)" item="item"
                  context-menu-options="$ctrl.getContextMenuOptions(item)">
              <div class="icon">
                <span ng-class="{'fa fa-folder': item.isFolder, 'fa fa-file': !item.isFolder}"></span>
              </div>
              <div class="error" ng-if="item.error">
                <span class="pficon pficon-info" data-toggle="tooltip" title="{{item.error}}"></span>
              </div>
              <div class="name" ng-class="{'has-error': item.error}" data-toggle="tooltip" title="{{item.name}}">
                {{ $ctrl.view === 'tiles' ? (item.name | limitTo: 16) : item.name }}{{ ($ctrl.view === 'tiles' && item.name.length > 16) ? '...' : '' }}
              </div>
            </div>
            <div class="tile empty" ng-if="$ctrl.view === 'tiles'" ng-repeat="item in $ctrl.emptyItems"></div>
          </div>
        `,
        controller: entaxyFilePanelController
    })
    .name;

    function entaxyFilePanelController() {
        let ctrl = this;

        ctrl.$onInit = function () {
            ctrl.emptyItems = [{},{},{},{},{},{},{},{}];
        }

        ctrl.isActive = function (item) {
            return ctrl.selectedItems && ctrl.selectedItems.includes(item);
        }

        ctrl.considerChangingSelection = function (item) {
            if (!ctrl.selectedItems.includes(item)) {
                ctrl.changeSelectionFn(item);
            }
        }

        ctrl.changeSelection = function (clickEvent, item) {
            ctrl.changeSelectionFn(item, clickEvent.ctrlKey);
        }

        ctrl.open = function (item) {
            ctrl.openFn(item);
        }

        ctrl.getContextMenuOptions = function (item) {
            return item.isFolder ?
                ctrl.folderContextMenuOptions :
                isAdm(item) ? ctrl.admResourceContextMenuOptions : ctrl.resourceContextMenuOptions;
        }

        function isAdm(item) {
            let splitName = item.name.split('.');
            return splitName.length > 1 && splitName.pop() === 'adm';
        }
    }
})(Entaxy || (Entaxy = {}));
