define(["angular","lodash","cjt/util/locale","cjt/util/table","uiBootstrap","cjt/filters/wrapFilter","cjt/services/cpanel/nvDataService","app/services/versionControlService","app/services/sseAPIService","cjt/services/alertService","cjt/directives/alert","cjt/directives/alertList","cjt/directives/actionButtonDirective"],(function(e,t,o,n){"use strict";var r=e.module("cpanel.versionControl");return r.value("PAGE",PAGE),r.controller("ListRepositoriesController",["$scope","$window","$location","versionControlService","sseAPIService","PAGE","nvDataService","alertService","$timeout",function(e,r,s,i,a,l,c,d,p){var u=this;u.isLoading=!1,u.list=[],u.cloningList=[];var g,f=l.securityToken+"/sse/UserTasks",m=["task_processing","task_complete","task_failed"],v={json:!0};u.homeDirPath=l.homeDir,u.hasFilemanagerAccess="0"!==l.hasFileManagerAccess,u.hasShellAccess="0"!==l.hasShellAccess;var y=new n;function h(e){return e&&(e.isExpanded=!1,e.detailsLoading=!1,e.delete_requested=!1,e.cloneState=""),e}y.setSort("name","asc"),u.meta=y.getMetadata(),u.filteredList=y.getList(),u.paginationMessage=y.paginationMessage,u.meta.pageSize=parseInt(l.reposListPageSize,10),y.setSearchFunction((function(e,t){return t=t.toLowerCase(),-1!==e.name.toLowerCase().indexOf(t)||-1!==e.repository_root.toLowerCase().indexOf(t)})),u.render=function(){u.filteredList=y.update()},u.sortList=function(){u.render()},u.selectPage=function(){u.render()},u.selectPageSize=function(){u.render(),l.reposListPageSize!==u.meta.pageSize&&c.setObject({repos_list_page_size:u.meta.pageSize}).then((function(){l.reposListPageSize=u.meta.pageSize})).catch((function(e){d.add({type:"danger",message:e.message,closeable:!0,replace:!1,group:"versionControl"})}))},u.searchList=function(){u.render()},u.init=function(){var e=l.repoErrors;e.length>0?e.forEach((function(e){d.add({type:"danger",message:e,closeable:!0,replace:!1,group:"versionControl"})})):u.updateRepositoriesList(!0)},u.updateRepositoriesList=function(e){u.isLoading=!0;var o=e?"name,tasks":null;return i.listRepositories(e,o).then((function(e){u.list=t.map(e,(function(e){return h(e)}));for(var o=0,n=u.list.length;o<n;o++)u.list[o].cloneInProgress&&u.cloningList.push(u.list[o]);u.cloningList&&u.cloningList.length>0&&a.initialize(),y.load(u.list),u.render(),u.isLoading=!1}),(function(e){d.add({type:"danger",message:e.message,closeable:!0,replace:!1,group:"versionControl"}),u.isLoading=!1}))},e.$on("sse:task_processing",(function(o,n){var r=n.task_id,s=t.find(u.cloningList,(function(e){return e.cloneTaskID===r}));if(s){var i=t.indexOf(u.list,s);-1!==i&&(s.cloneState="processing",t.extend(u.list[i],s),e.$apply(u.render))}})),e.$on("sse:task_complete",(function(o,n){var r=n.task_id,s=t.find(u.cloningList,(function(e){return e.cloneTaskID===r}));if(s){var l=t.indexOf(u.list,s);-1!==l&&(s.cloneState="complete",t.extend(u.list[l],s),e.$apply(u.render),t.remove(u.cloningList,s),0===u.cloningList.length&&a.close(g),p((function(){return i.getRepositoryInformation(s.repository_root,"name,tasks").then((function(e){var o,n=h(e);t.extend(u.list[l],((o=n)&&(o.cloneState="",o.cloneInProgress=!1,delete o.cloneTaskID),o)),d.removeById(r,"versionControl"),u.render()}),(function(e){d.removeById(r,"versionControl"),d.add({type:"danger",message:e.message,closeable:!0,replace:!1,group:"versionControl"})}))}),5e3))}})),e.$on("sse:task_failed",(function(n,r){var s=r.task_id,i=t.find(u.cloningList,(function(e){return e.cloneTaskID===s}));if(i){var l=t.indexOf(u.list,i);t.remove(u.cloningList,i),0===u.cloningList.length&&a.close(g),-1!==l&&(u.list.splice(l,1),d.add({type:"danger",message:o.maketext("Error occurred while cloning repository “[_1]”.",i.name),closeable:!0,replace:!1,group:"versionControl"}),e.$apply(u.render))}})),e.$on("sse:ready",(function(e){g=a.connect(f,m,v)})),e.$on("$destroy",(function(){g&&a.close(g)})),u.redirectToGitWeb=function(e,t){e?r.open(e,t+"GitWeb"):d.add({type:"danger",message:o.maketext("Unable to find repository web url"),closeable:!0,replace:!1,group:"versionControl"})},u.redirectToFileManager=function(e,t){e?r.open(e,t+"FileManager"):d.add({type:"danger",message:o.maketext("Unable to redirect to File Manager interface"),closeable:!0,replace:!1,group:"versionControl"})},u.cloneToClipboard=function(e){try{i.cloneToClipboard(e)&&d.add({type:"success",message:o.maketext("The system successfully copied the “[_1]” clone [output,acronym,URL,Uniform Resource Locator] to the clipboard.",e),closeable:!0,replace:!1,autoClose:1e4,group:"versionControl"})}catch(e){d.add({type:"danger",message:e,closeable:!0,replace:!1,group:"versionControl"})}},u.createRepository=function(){d.clear("","versionControl"),s.path("/create")},u.delete=function(e){var t;return e.removing=!0,t=u.hasFilemanagerAccess?o.maketext("The system successfully removed the “[_1]” repository from the list of [asis,cPanel]-managed repositories. You can use the [output,url,_2,File Manager,target,_3] interface to delete the repository contents.",e.name,e.fileManagerRedirectURL,"file-manager"):o.maketext("The system successfully removed the “[_1]” repository from the list of [asis,cPanel]-managed repositories.",e.name),i.deleteRepository(e.repository_root).then((function(){y.remove(e),u.render(),d.add({type:"success",message:t,closeable:!0,replace:!1,autoClose:!1,group:"versionControl"})}),(function(t){d.add({type:"danger",message:o.maketext("The system could not remove the “[_1]” repository in the “[_2]” directory.",e.name,e.repository_root),closeable:!0,replace:!1,group:"versionControl"}),e.removing=!1,e.delete_requested=!1}))},u.deleteText=function(e){return o.maketext("Are you sure that you want to remove the “[_1]” repository from the list of [asis,cPanel]-managed repositories?",e.name)},u.manageRepository=function(e){s.path("/manage/"+encodeURIComponent(e)+"/basic-info")},u.getRepositoryDetails=function(e,o){if(e.detailsLoading=!0,o)return i.getRepositoryInformation(e.repository_root,"name,clone_urls,branch,last_update,source_repository").then((function(o){var n;n=e.repository_root,-1!==t.findIndex(u.filteredList,(function(e){return e.repository_root===n}))&&(o.detailsLoading=!1,o.isExpanded=!0,o.delete_requested=e.delete_requested,t.assign(e,o)),t.assign(e,o)}),(function(e){d.add({type:"danger",message:e.message,closeable:!0,replace:!1,group:"versionControl"})}));e.detailsLoading=!1,e.isExpanded=!1},u.init()}])}));