import typeMetadataStorage from '../../storage/type-metadata.storage';
import { determineRequiredValue, PropOptions } from './prop.options';

export type EnumPropOptions = PropOptions<String> & {
  enum: Record<string, string>;
  isArray?: boolean;
};

export function EnumProp(options: EnumPropOptions): PropertyDecorator {
  return (target, propertyKey) => {
    const propKey = propertyKey.toString();

    typeMetadataStorage.addPropertyMetadata(
      target.constructor,
      propKey,
      {
        ...options,
        required: determineRequiredValue(options),
        type: String
      }
    );
  };
}
