import { Component } from 'inferno';

// We can't create an unique seed instance.
const uniqueFactory = (prefix = 'unique', start = 1) => {
  // start with 1
  const uniqueMap = { unique: start };
  return () => {
    if (!uniqueMap[prefix]) { uniqueMap[prefix] = start; }
    return `${prefix}${uniqueMap[prefix]++}`;
  };
};
const componentUid = uniqueFactory('uuid_component_', 1);

export const uuidWrapper = (WrapperComponent): any => {
  return class ComponentWrapper extends Component<any, any> {
    public static uuid = componentUid();
    public render() {
      return (
        <WrapperComponent {...this.props} />
      );
    }
  };
};
