define(["angular","lodash","cjt/util/locale","uiBootstrap","cjt/directives/alertList","cjt/services/alertService","cjt/directives/disableAnimations","cjt/directives/toggleSortDirective","cjt/directives/validationItemDirective","cjt/directives/spinnerDirective","cjt/directives/autoFocus","cjt/directives/lastItem","cjt/filters/wrapFilter","cjt/filters/breakFilter","cjt/services/dataCacheService","app/directives/issueList","app/directives/modelToLowerCase","app/services/userService"],(function(e,i,t){var s=e.module("App");return s.controller("listController",["$scope","$routeParams","$q","$location","$filter","$timeout","userService","spinnerAPI","alertService","wrapFilter","dataCache","features","quotaInfo",function(i,n,r,a,l,c,u,d,o,f,g,p,m){function v(e){i.userList&&(d.start("loadingSpinner"),c((function(){var t;if(i.totalItems=i.userList.length,e){var s=l("filter");t=s(i.userList,i.filterText),t=s(t,i.filterAdvanced),i.filteredData=!0}else t=i.filteredData?i.filteredUsers:i.userList;var n=i.meta.pageSize*(i.meta.pageNumber-1),r=i.meta.pageSize*i.meta.pageNumber,a=!1;r>t.length&&(a=!0),i.filteredTotalItems=t.length,i.filteredUsers=t,t.length<i.meta.pageSize?i.pagedFilteredUser=t:i.pagedFilteredUser=a?t.slice(n):t.slice(n,r);var c=i.pageTotalItems;i.pageTotalItems=t.length,0!==i.pageTotalItems&&c!==t.length||d.stop("loadingSpinner"),i.hideViewLoadingPanel()}),5))}i.doneRendering=function(e){d.stop("loadingSpinner")},i.edit=function(e){if(i.isOverQuota)return!1;if("sub"===e.type)i.loadView("edit/subaccount/"+e.guid,{},{clearAlerts:!0});else{if("service"!==e.type)return o.clear(),void o.add({type:"danger",message:t.maketext("You cannot edit the account."),id:"errorAccountNotValid"});var s;if(e.services.email&&e.services.email.enabled)s="email";else if(e.services.ftp&&e.services.ftp.enabled)s="ftp";else{if(!e.services.webdisk||!e.services.webdisk.enabled)return o.clear(),void o.add({type:"danger",message:t.maketext("The service account is invalid."),id:"errorServiceAccountNotValid"});s="webdisk"}i.loadView("edit/service/"+s+"/"+e.full_username,{},{clearAlerts:!0})}},i.filterText=function(e){return!i.meta.filterValue||["full_username","real_name","alternate_email","type","typeLabel","serviceSearch"].some((function(t){var s=e[t];if(s&&-1!==s.toLocaleLowerCase().indexOf(i.meta.filterValue))return!0}))},i.hasAdvancedSearch=function(){return"all"!==i.advancedFilters.services||"both"!==i.advancedFilters.issues},i.filterAdvanced=function(e){var t=function(e){var t=e.merge_candidates;return i.meta.filterValue&&(t=l("filter")(t,i.filterText)),!!(t=l("filter")(t,i.filterAdvanced)).length};if("noissues"===i.advancedFilters.issues)switch(e.type){case"hypothetical":if(!t(e))return!1;if(e.candidate_issues_count===e.merge_candidates.length)return!1;break;case"sub":if(e.issues.length>0||e.has_expired_invite||t(e)&&e.candidate_issues_count)return!1;break;default:if(e.issues.length>0)return!1}if("issues"===i.advancedFilters.issues)switch(e.type){case"hypothetical":if(!t(e))return!1;if(!e.candidate_issues_count)return!1;break;case"sub":if(!(0!==e.issues.length||e.has_expired_invite||t(e)&&e.candidate_issues_count))return!1;break;default:if(0===e.issues.length)return!1}return"all"===i.advancedFilters.services||(!("email"!==i.advancedFilters.services||!e.services.email.enabled&&!e.services.email.enabledInCandidate)||(!("ftp"!==i.advancedFilters.services||!e.services.ftp.enabled&&!e.services.ftp.enabledInCandidate)||!("webdisk"!==i.advancedFilters.services||!e.services.webdisk.enabled&&!e.services.webdisk.enabledInCandidate)))},i.sortList=function(e,t){if(i.selectedRow=-1,!t){var s=!i.advancedFilters.showLinkable;i.fetch(s)}},i.triggerClearSearch=function(e){27===e.keyCode&&i.clearSearch()},i.clearSearch=function(){i.meta.filterValue=""},i.fetch=function(){i.filteredUsers=[],i.filteredData=!1,i.showViewLoadingPanel();var e=!i.advancedFilters.showLinkable;return d.start("loadingSpinner"),u.fetchList(e,i.meta).then((function(e){g.set("userList",e.items),i.userList=g.get("userList"),i.totalItems=i.userList.length,i.pageNumber=1,v(!0)}),(function(e){o.add({type:"danger",message:e,id:"fetchError"})})).finally((function(){d.stop("loadingSpinner")}))},i.showDeleteConfirm=function(e){e.ui.showDeleteConfirm=!0},i.hideDeleteConfirm=function(e){e.ui.showDeleteConfirm=!1},i.canShowDeleteConfirm=function(e){return e.ui.showDeleteConfirm},i.isDeleting=function(e){return e.ui.deleting},i.deleteUser=function(e,t){return d.start("loadingSpinner"),e.ui.deleting=!0,u.delete(e).then((function(s){var n=t?t.merge_candidates:i.userList,r=n.indexOf(e);if(-1!==r){if(s.data)n.splice(r,1,s.data);else if(n.splice(r,1),t&&"hypothetical"===t.type&&1===t.merge_candidates.length){var a=i.userList.indexOf(t);-1!==a&&i.userList.splice(a,1,t.merge_candidates.pop())}g.set("userList",i.userList),v(!0)}}),(function(e){o.add({type:"danger",message:e,id:"deleteError"})})).finally((function(){e.ui.deleting=!1,d.stop("loadingSpinner")}))},i.wrappedDeleteText=function(e){var i=f(e.full_username,"[@.]",5);return t.maketext("Do you wish to remove the “[_1]” user from your system?",i)},i.linkUser=function(e,s){return d.start("loadingSpinner"),e.ui.linking=!0,y(e,s),u.link(e).then((function(e){var n=i.userList,r=n.indexOf(s);-1!==r&&(n.splice(r,1,e),g.set("userList",n),v(!0),o.add({type:"success",message:e.synced_password?t.maketext("The system successfully linked the service account to the “[_1]” user’s [asis,subaccount]. The service account passwords have not changed.",e.full_username):t.maketext("The system successfully linked the service account to the “[_1]” user’s [asis,subaccount]. The service account passwords did not change. You must provide a new password if you wish to enable any additional [asis,subaccount] services.",e.full_username),id:"link-user-success",replace:!1}))}),(function(e){o.add({type:"danger",message:e,id:"linkError"})})).finally((function(){d.stop("loadingSpinner"),e.ui.linking=!1,y(e,s)}))},i.dismissLink=function(e,t){return d.start("loadingSpinner"),e.ui.linking=!0,y(e,t),u.dismissLink(e).then((function(s){var n=i.userList,r=n.indexOf(t),a=n[r].merge_candidates.indexOf(e);if(-1!==a){var l=n[r].merge_candidates[a];if(n[r].merge_candidates.splice(a,1),h(n,l),"hypothetical"===n[r].type&&1===n[r].merge_candidates.length){var c=n[r].merge_candidates.pop();h(n,c),n.splice(r,1)}g.set("userList",n),v(!0)}}),(function(e){o.add({type:"danger",message:e,id:"dismissError"})})).finally((function(){d.stop("loadingSpinner"),e.ui.linking=!1,y(e,t)}))};var h=function(e,i){for(var t=0,s=e.length;t<s;t++){if(e[t].full_username>i.full_username)return void e.splice(t,0,i)}e.push(i)};i.linkAll=function(e){return d.start("loadingSpinner"),e.ui.linkingAny=e.ui.linkingAll=!0,u.linkAll(e).then((function(s){var n=i.userList,r=n.indexOf(e);-1!==r&&(n.splice(r,1,s),g.set("userList",n),v(!0)),o.add({type:"success",message:s.synced_password?t.maketext("The system successfully linked all of the service accounts for the “[_1]” user to the [asis,subaccount]. The service account passwords did not change.",s.full_username):t.maketext("The system successfully linked all of the service accounts for the “[_1]” user to the [asis,subaccount]. The service account passwords did not change. You must provide a new password if you wish to enable any additional [asis,subaccount] services.",s.full_username),id:"link-all-success",replace:!1})}),(function(e){o.add({type:"danger",message:e,id:"dismissError"})})).finally((function(){d.stop("loadingSpinner"),e.ui.linkingAny=e.ui.linkingAll=!1}))},i.dismissAll=function(e){return d.start("loadingSpinner"),e.ui.linkingAny=e.ui.linkingAll=!0,u.dismissAll(e).then((function(t){var s=i.userList,n=s.indexOf(e);if(-1!==n){for(var r=s[n].merge_candidates.shift();r;)h(s,r),r=s[n].merge_candidates.shift();"hypothetical"===e.type&&s.splice(n,1),g.set("userList",s),v(!0)}}),(function(e){o.add({type:"danger",message:e,id:"linkError"})})).finally((function(){d.stop("loadingSpinner"),e.ui.linkingAny=e.ui.linkingAll=!1}))};var y=function(e,i){i.ui.linkingAll=!0,i.ui.linkingAny=!1;for(var t=0,s=i.merge_candidates.length;t<s;t++)i.merge_candidates[t].ui.linking?i.ui.linkingAny=!0:i.ui.linkingAll=!1};i.showAdvancedSettings=!1,i.alerts=o.getAlerts(),i.isOverQuota=!m.under_quota_overall,i.openConfirmation=null,i.advancedFilters={services:"all",issues:"both",showLinkable:!0},i.hasFeature=PAGE.hasFeature,i.hasFeature&&(i.userList=[],i.filteredUserList=[],i.totalItems=0,i.meta={sortDirection:n.sortDirection||"asc",sortBy:n.sortBy||"full_username",sortType:n.sortType,pageSize:n.pageSize||50,pageNumber:n.pageNumber||1,pageSizes:[10,50,100,200]},i.features=p,i.filteredTotalItems=0,i.filteredUsers=[]),function(){var n;if(i.isOverQuota&&(o.clear(),o.add({message:t.maketext("Your [asis,cPanel] account exceeds its disk quota. You cannot add or edit users."),type:"danger",id:"over-quota-warning",replace:!1,counter:!1})),s.firstLoad.userList&&PAGE.userList){s.firstLoad.userList=!1;try{n=u.prepareList(PAGE.userList),PAGE.userList=null,g.set("userList",n.items),i.userList=g.get("userList"),i.totalItems=i.userList.length}catch(i){o.clear();var r=i;e.isArray(r)||(r=[r]),r.forEach((function(e){o.add({type:"danger",message:e.toString(),id:"fetchError"})}))}}else a.search().loadFromCache&&(i.userList=g.get("userList"))?(i.totalItems=i.userList.length,i.filteredTotalItems=i.userList.length):i.fetch(!i.advancedFilters.showLinkable);return i.filteredData=!1,c((function(){v(!0)}),5)}().finally((function(){i.$watchGroup(["meta.filterValue","advancedFilters.services","advancedFilters.issues"],(function(e,i){v(!0)})),i.$watchGroup(["meta.pageSize","meta.pageNumber"],(function(e,i){v()}))}))}])}));