import { isPlainObject } from 'lodash';
import {
  IPublicTypePluginRegisterOptions,
  IPublicTypePluginDeclaration,
} from '@felce/lowcode-types';

export function isValidPreferenceKey(
  key: string,
  preferenceDeclaration: IPublicTypePluginDeclaration,
): boolean {
  if (!preferenceDeclaration || !Array.isArray(preferenceDeclaration.properties)) {
    return false;
  }
  return preferenceDeclaration.properties.some((prop) => {
    return prop.key === key;
  });
}

export function isLowCodeRegisterOptions(opts: any): opts is IPublicTypePluginRegisterOptions {
  return opts && ('autoInit' in opts || 'override' in opts);
}

export function filterValidOptions(opts: any, preferenceDeclaration: IPublicTypePluginDeclaration) {
  if (!opts || !isPlainObject(opts)) return opts;
  const filteredOpts = {} as any;
  Object.keys(opts).forEach((key) => {
    if (isValidPreferenceKey(key, preferenceDeclaration)) {
      const v = opts[key];
      if (v !== undefined && v !== null) {
        filteredOpts[key] = v;
      }
    }
  });
  return filteredOpts;
}
