const METADATA_BY_TYPE = {
  generator: {
    values: [
      {
        key: 'name',
        name: 'Name',
        format: 'string'
      },
      {
        key: 'utc',
        name: 'Time',
        format: 'utc',
        hints: {
          domain: 1
        }
      },
      {
        key: 'yesterday',
        name: 'Yesterday',
        format: 'utc',
        hints: {
          domain: 2
        }
      },
      {
        key: 'wavelengths',
        name: 'Wavelength',
        unit: 'nm',
        format: 'string[]',
        hints: {
          range: 4
        }
      },
      // Need to enable "LocalTimeSystem" plugin to make use of this
      // {
      //     key: "local",
      //     name: "Time",
      //     format: "local-format",
      //     source: "utc",
      //     hints: {
      //         domain: 3
      //     }
      // },
      {
        key: 'sin',
        name: 'Sine',
        unit: 'Hz',
        formatString: '%0.2f',
        hints: {
          range: 1
        }
      },
      {
        key: 'cos',
        name: 'Cosine',
        unit: 'deg',
        formatString: '%0.2f',
        hints: {
          range: 2
        }
      },
      {
        key: 'intensities',
        name: 'Intensities',
        format: 'number[]',
        hints: {
          range: 3
        }
      }
    ]
  },
  'example.state-generator': {
    values: [
      {
        key: 'name',
        name: 'Name',
        format: 'string'
      },
      {
        key: 'utc',
        name: 'Time',
        format: 'utc',
        hints: {
          domain: 1
        }
      },
      {
        key: 'local',
        name: 'Time',
        format: 'utc',
        source: 'utc',
        hints: {
          domain: 2
        }
      },
      {
        key: 'state',
        source: 'value',
        name: 'State',
        format: 'enum',
        enumerations: [
          {
            value: 0,
            string: 'OFF'
          },
          {
            value: 1,
            string: 'ON'
          }
        ],
        filters: [
          {
            singleSelectionThreshold: true,
            comparator: 'equals',
            possibleValues: [
              { label: 'OFF', value: 0 },
              { label: 'ON', value: 1 }
            ]
          }
        ],
        hints: {
          range: 1
        }
      },
      {
        key: 'value',
        name: 'Value',
        hints: {
          range: 2
        }
      }
    ]
  }
};

export default function GeneratorMetadataProvider() {}

GeneratorMetadataProvider.prototype.supportsMetadata = function (domainObject) {
  return Object.prototype.hasOwnProperty.call(METADATA_BY_TYPE, domainObject.type);
};

GeneratorMetadataProvider.prototype.getMetadata = function (domainObject) {
  return Object.assign({}, domainObject.telemetry, METADATA_BY_TYPE[domainObject.type]);
};
