import {ViewEngine} from 'aurelia-templating';
import {_createDynamicElement} from './dynamic-element';

export function getElementName(address) {
  return /([^\/^\?]+)\.html/i.exec(address)[1].toLowerCase();
}

export function configure(config) {
  const viewEngine = config.container.get(ViewEngine);
  const loader = config.aurelia.loader;

  viewEngine.addResourcePlugin('.html', {
    'fetch': function(viewUrl) {
      return loader.loadTemplate(viewUrl).then(registryEntry => {
        let bindableNames = registryEntry.template.getAttribute('bindable');
        const useShadowDOMmode: null | '' | 'open' | 'closed' = registryEntry.template.getAttribute('use-shadow-dom');
        const name = getElementName(viewUrl);

        if (bindableNames) {
          bindableNames = bindableNames.split(',').map(x => x.trim());
          registryEntry.template.removeAttribute('bindable');
        } else {
          bindableNames = [];
        }

        return { [name]: _createDynamicElement({name, viewUrl, bindableNames, useShadowDOMmode}) };
      });
    }
  });
}
