text: /*
   * Copyright © 2016-2019 The Thingsboard Authors
   *
   * Licensed under the Apache License, Version 2.0 (the "License");
   * you may not use this file except in compliance with the License.
   * You may obtain a copy of the License at
   *
   *     http://www.apache.org/licenses/LICENSE-2.0
   *
   * Unless required by applicable law or agreed to in writing, software
   * distributed under the License is distributed on an "AS IS" BASIS,
   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
   * See the License for the specific language governing permissions and
   * limitations under the License.
   */
  /* eslint-disable import/no-unresolved, import/default */
  
  import addCustomerTemplate from './add-customer.tpl.html';
  import customerCard from './customer-card.tpl.html';
  
  /* eslint-enable import/no-unresolved, import/default */
  
  /*@ngInject*/
  export default function CustomerController(customerService, $state, $stateParams, $translate, types) {
  
      var customerActionsList = [
          {
              onAction: function ($event, item) {
                  openCustomerUsers($event, item);
              },
              name: function() { return $translate.instant('user.users') },
              details: function() { return $translate.instant('customer.manage-customer-users') },
              icon: "account_circle",
              isEnabled: function(customer) {
                  return customer && (!customer.additionalInfo || !customer.additionalInfo.isPublic);
              }
          },
          {
              onAction: function ($event, item) {
                  openCustomerAssets($event, item);
              },
              name: function() { return $translate.instant('asset.assets') },
              details: function(customer) {
                  if (customer && customer.additionalInfo && customer.additionalInfo.isPublic) {
                      return $translate.instant('customer.manage-public-assets')
                  } else {
                      return $translate.instant('customer.manage-customer-assets')
                  }
              },
              icon: "domain"
          },
          {
              onAction: function ($event, item) {
                  openCustomerDevices($event, item);
              },
              name: function() { return $translate.instant('device.devices') },
              details: function(customer) {
                  if (customer && customer.additionalInfo && customer.additionalInfo.isPublic) {
                      return $translate.instant('customer.manage-public-devices')
                  } else {
                      return $translate.instant('customer.manage-customer-devices')
                  }
              },
              icon: "devices_other"
          },
          {
              onAction: function ($event, item) {
                  openCustomerDashboards($event, item);
              },
              name: function() { return $translate.instant('dashboard.dashboards') },
              details: function(customer) {
                  if (customer && customer.additionalInfo && customer.additionalInfo.isPublic) {
                      return $translate.instant('customer.manage-public-dashboards')
                  } else {
                      return $translate.instant('customer.manage-customer-dashboards')
                  }
              },
              icon: "dashboard"
          },
          {
              onAction: function ($event, item) {
                  vm.grid.deleteItem($event, item);
              },
              name: function() { return $translate.instant('action.delete') },
              details: function() { return $translate.instant('customer.delete') },
              icon: "delete",
              isEnabled: function(customer) {
                  return customer && (!customer.additionalInfo || !customer.additionalInfo.isPublic);
              }
          }
      ];
  
      var vm = this;
  
      vm.types = types;
  
      vm.customerGridConfig = {
  
          refreshParamsFunc: null,
  
          deleteItemTitleFunc: deleteCustomerTitle,
          deleteItemContentFunc: deleteCustomerText,
          deleteItemsTitleFunc: deleteCustomersTitle,
          deleteItemsActionTitleFunc: deleteCustomersActionTitle,
          deleteItemsContentFunc: deleteCustomersText,
  
          fetchItemsFunc: fetchCustomers,
          saveItemFunc: saveCustomer,
          deleteItemFunc: deleteCustomer,
  
          getItemTitleFunc: getCustomerTitle,
  
          itemCardTemplateUrl: customerCard,
  
          actionsList: customerActionsList,
  
          onGridInited: gridInited,
  
          addItemTemplateUrl: addCustomerTemplate,
  
          addItemText: function() { return $translate.instant('customer.add-customer-text') },
          noItemsText: function() { return $translate.instant('customer.no-customers-text') },
          itemDetailsText: function(customer) {
              if (customer && (!customer.additionalInfo || !customer.additionalInfo.isPublic)) {
                  return $translate.instant('customer.customer-details')
              } else {
                  return '';
              }
          },
          isSelectionEnabled: function (customer) {
              return customer && (!customer.additionalInfo || !customer.additionalInfo.isPublic);
          },
          isDetailsReadOnly: function (customer) {
              return customer && customer.additionalInfo && customer.additionalInfo.isPublic;
          }
      };
  
      if (angular.isDefined($stateParams.items) && $stateParams.items !== null) {
          vm.customerGridConfig.items = $stateParams.items;
      }
  
      if (angular.isDefined($stateParams.topIndex) && $stateParams.topIndex > 0) {
          vm.customerGridConfig.topIndex = $stateParams.topIndex;
      }
  
      vm.openCustomerUsers = openCustomerUsers;
      vm.openCustomerAssets = openCustomerAssets;
      vm.openCustomerDevices = openCustomerDevices;
      vm.openCustomerDashboards = openCustomerDashboards;
  
      function deleteCustomerTitle(customer) {
          return $translate.instant('customer.delete-customer-title', {customerTitle: customer.title});
      }
  
      function deleteCustomerText() {
          return $translate.instant('customer.delete-customer-text');
      }
  
      function deleteCustomersTitle(selectedCount) {
          return $translate.instant('customer.delete-customers-title', {count: selectedCount}, 'messageformat');
      }
  
      function deleteCustomersActionTitle(selectedCount) {
          return $translate.instant('customer.delete-customers-action-title', {count: selectedCount}, 'messageformat');
      }
  
      function deleteCustomersText() {
          return $translate.instant('customer.delete-customers-text');
      }
  
      function gridInited(grid) {
          vm.grid = grid;
      }
  
      function fetchCustomers(pageLink) {
          return customerService.getCustomers(pageLink);
      }
  
      function saveCustomer(customer) {
          return customerService.saveCustomer(customer);
      }
  
      function deleteCustomer(customerId) {
          return customerService.deleteCustomer(customerId);
      }
  
      function getCustomerTitle(customer) {
          return customer ? customer.title : '';
      }
  
      function openCustomerUsers($event, customer) {
          if ($event) {
              $event.stopPropagation();
          }
          $state.go('home.customers.users', {customerId: customer.id.id});
      }
  
      function openCustomerAssets($event, customer) {
          if ($event) {
              $event.stopPropagation();
          }
          $state.go('home.customers.assets', {customerId: customer.id.id});
      }
  
      function openCustomerDevices($event, customer) {
          if ($event) {
              $event.stopPropagation();
          }
          $state.go('home.customers.devices', {customerId: customer.id.id});
      }
  
      function openCustomerDashboards($event, customer) {
          if ($event) {
              $event.stopPropagation();
          }
          $state.go('home.customers.dashboards', {customerId: customer.id.id});
      }
  }
  