define(["lodash","angular","cjt/util/locale","cjt/services/fuzzy","cjt/modules","ngRoute","cjt/directives/callout","cjt/validator/domain-validators","cjt/validator/username-validators","cjt/directives/actionButtonDirective","app/services/domains","cjt/directives/validationContainerDirective","cjt/directives/validationItemDirective","cjt/directives/toggleSwitchDirective"],(function(e,n,o,a){"use strict";var i=new a,t="cpanel.domains.views.createDomain",m="createDomain";return n.module(t,["cpanel.domains.domains.service","ngRoute","cjt2.services.alert"]).controller(m,["$scope","$log","$location","$routeParams","$timeout","domains","alertService","domainTypes","DOMAIN_TYPE_CONSTANTS","PAGE","ZONE_EDITOR_APP_OBJ",function(a,t,m,r,c,s,u,D,l,d,w){var f={},p={};function g(){s.get().then((function(e){var n=e.filter((function(e){return!!e.canBeSuggested})).map((function(e){return e.domain}));i.loadSet(n)})),d.hasWebServerRole||(a.mustInheritDocumentRoot=!0)}function v(){a.creationDelayed=!0}function h(e){return s.findDomainByName(e)}function y(){if(a.newDomain.newDomainName)if(a.newDomain.domainType===l.ALIAS)a.newDomain.documentRoot=a.mainDomain.documentRoot.replace(a.mainDomain.homedir+"/",""),a.newDomain.fullDocumentRoot=a.mainDomain.documentRoot;else{var e=a.newDomain.newDomainName.replace("*","_wildcard_");a.newDomain.documentRoot=e,a.newDomain.fullDocumentRoot=s.generateFullDocumentRoot(e)}}function N(e){a.newDomain.subdomain=e}function S(){var e=a.newDomain.newDomainName=a.newDomain.newDomainName.toLocaleLowerCase();if(a.newDomain.domainType="",a.newDomain.newDomainName){if(a.newDomain.inheritDocumentRoot)a.newDomain.domainType=l.ALIAS;else{var n=e.split(".");if(n.length>2)for(var o,i=1;i<n.length;i++){if(h(o=n.slice(i).join("."))){a.newDomain.domainType=l.SUBDOMAIN,a.newDomain.domain=o,a.newDomain.subdomain=n.slice(0,i).join(".");break}}}a.newDomain.domainType||(a.newDomain.domainType=l.ADDON,a.newDomain.domain=a.mainDomain.domain)}}function R(e){a.newDomain.newDomainName=e,S(),y(),a.clearSuggestedDomains()}function b(){a.suggestedDomains=[]}n.extend(a,{creationMessages:[],DOMAIN_TYPE_CONSTANTS:l,submittingForm:!1,creationDelayed:!1,upgradeUrl:d.upgradeUrl,domainsConfig:d.domainsConfig||{showDocumentRoot:!0,showSubdomain:!0,showSubmitAnother:!0,returnUrl:"#/",returnText:o.maketext("Return to Domains")},documentRootPattern:s.getDocumentRootPattern(),suggestedDomains:[],domainTypes:D,requirePublicHTMLSubs:"1"===d.requirePublicHTMLSubs.toString(),shareDocrootDefault:"1"===d.shareDocrootDefault.toString(),mainDomain:s.getMainDomain(),newDomain:{},getFormFieldClasses:function(e){return e&&!e.$pristine&&e.$invalid?"col-xs-12 col-md-6":"col-xs-12"},resetForm:function(){a.newDomain.newDomainName="",a.newDomain.documentRoot="",a.shareDocrootDefault?a.newDomain.inheritDocumentRoot=a.canCreateDomainType(l.ALIAS):a.newDomain.inheritDocumentRoot=!1,S(),y(),N(a.newDomain.newDomainName)},createDomain:function(i,r,D,w){a.submittingForm=!0;var f=c(v,1e3),p=n.copy(r);return d.hasWebServerRole||(t.debug("Because there is no webserver role on this system, the domain will be created as an alias domain."),p.domainType=l.ALIAS),s.add(p).then((function(){var r;if(t.debug("submittingDomainObj.fullDocumentRoot",p.fullDocumentRoot),r=d.hasWebServerRole?o.maketext("You have successfully created the new “[_1]” domain with the document root of “[_2]”.",p.newDomainName,e.escape(p.fullDocumentRoot)):o.maketext("You have successfully created the new “[_1]” domain.",p.newDomainName),u.add({type:"success",message:r}),D)g(),a.resetForm(),n.element(document).find("input[autofocus]").focus(),i.$setPristine();else{if(w)return w(p.newDomainName);m.path("/")}})).finally((function(){a.creationDelayed=!1,c.cancel(f),a.submittingForm=!1}))},onUpdateNewDomainName:function(){if(a.subdomain="",a.domain="",a.documentRoot="",a.newDomain.isWildcard=!1,a.newDomain.newDomainName){"*"===a.newDomain.newDomainName.substr(0,1)&&(a.newDomain.isWildcard=!0),function(e){var n=e.split(".");if(n.shift(),h(n.join(".")))return 1;return 0}(a.newDomain.newDomainName)&&(a.newDomain.inheritDocumentRoot=!1);var e=a.newDomain.newDomainName.split(".");e.length>=3&&function(e){var n=e.slice(e.length-2).join(".");e.pop(),e.pop();var o=!a.canCreateDomainType(l.ALIAS)&&!a.canCreateDomainType(l.ADDON),t=o?10:4,m=i.search(n),r=m.filter((function(e){return e.distance<t}));if(r.length){var c=e.join(".")+"."+m[0].match;a.newDomain.domain=s.getMainDomain().domain,a.clearSuggestedDomains(),c!==a.newDomain.newDomainName&&(a.suggestedDomains=r.slice(0,5).map((function(n){var a=e.join(".")+"."+n.match;return{domain:a,closeable:!o,use:function(){R(a)},cancel:b}})))}}(e),S(),y(),N(a.newDomain.newDomainName)}},useSuggestedDomain:R,clearSuggestedDomains:b,onToggleInheritDocumentRoot:function(){S(),y()},onDocumentRootUpdated:function(){a.newDomain.fullDocumentRoot=s.generateFullDocumentRoot(a.newDomain.documentRoot)},canCreateDomainType:function(e){if(!p[e])return!1;var n=function(e){return f[e]}(e);return("*."!==(a.newDomain.newDomainName||"").substr(0,2)||e!==l.ADDON&&e!==l.ALIAS)&&!n.overLimit},canCreateDomains:function(){return a.canCreateDomainType(l.ALIAS)||a.canCreateDomainType(l.ADDON)||a.canCreateDomainType(l.SUBDOMAIN)},inheritDocRootSelectionDisabled:function(){return!a.canCreateDomainType(l.ALIAS)||!a.canCreateDomainType(l.SUBDOMAIN)&&!a.canCreateDomainType(l.ADDON)}}),D.forEach((function(e){f[e.value]=e,p[e.value]=d.features[e.value]})),a.resetForm(),r.domain&&(a.newDomain.newDomainName=r.domain,S(),y(),N(a.newDomain.newDomainName)),document.addEventListener("cp-alert-message",(function(e){a.$apply((function(){u.add({type:e.detail.type,message:e.detail.message,dismissible:void 0===e.detail.dismissible||e.detail.dismissible,replace:e.detail.replace||!1,id:e.detail.id,autoClose:e.detail.autoClose})}))})),g(),!d.hasWebServerRole&&w&&a.creationMessages.push({type:"info",message:o.maketext("Because this server does not use the “[_1]” role, the system creates new domains as separate zones. If you only need a [asis,DNS] entry, you can add the domain as new record on an existing zone in the [output,url,_2,_3,_4] interface.","WebServer",w.url,w.itemdesc,{_type:"offsite"})})}]),{namespace:t,controllerName:m}}));