var WebBeans2 = Namespace.declare("com.ceruleanCircle.EAM.3_services",
    class WebBeans extends Thing {
        static start() {
            var WeBeans = window[this.name] = window[this.name] || new this().init();

        }
        constructor() {
            super();
            this.customTags = new IndexedObjects().init("customTag");
            this.registry = new Map();
            this.registry.init("type.name");
            this.registry.allowCollections = true;
        }


        init() {
            console.log("WeBeans 2.0 ready");
            return this;
        }

        register(textTemplate, controller) {
            textTemplate = textTemplate.replace(/\$-\{/g, '${');
            //template = template.replace(/"/g, "'");
            textTemplate = textTemplate.replace(/<x-([^( >)]*)([ >])/g, "<div data-is='x-$1'$2");
            textTemplate = textTemplate.replace(/<\/x-(.*)>/g, "</div>");
            var template = this.textTemplate2TemplateContent(textTemplate);

            var weBean = {
              id:template.getAttribute("id"),
              customTag:template.getAttribute("is"),
              template:template,
              textTemplate:template.innerHTML,
              controller:controller
            }

            this.registry.add(weBean.customTag, weBean);
            //this.registry.add(weBean.controller, weBean);
            this.registry.add(weBean.id, weBean);
            return weBean;

        }

        textTemplate2TemplateContent(textTemplate) {

            var divTemplate = document.createElement('div');
            divTemplate.innerHTML = textTemplate;
            var template = divTemplate.children[0];
            return template;
        }

        append(aClass, element) {
            if (!element)
                element = document.body;
            
            return aClass.type.ucpComponentDescriptor.defaultWebBeanUnit.weBean.append(element);
        }
    }
);