import { tripletComponentGenerator } from './tripletComponentGenerator';
import { HandlerType, HtmlValidElements, Triplet, TripletInterface } from './types';

function generateElement<K extends HtmlValidElements>(element: HtmlValidElements): HandlerType<K> {
  return classNames => {
    const classStr = `${classNames.join('')}`;
    return tripletComponentGenerator(element, classStr);
  };
}

const proxyFactory = (target: Triplet): TripletInterface => {
  return new Proxy(target, {
    get(target: Triplet, p: HtmlValidElements) {
      return target && generateElement(p);
    }
  })
};

export const triplet = proxyFactory({} as Triplet);
