interface PlainObject {
  // eslint-disable-next-line @typescript-eslint/no-explicit-any
  [key: string]: any;
}

export default class Plugin {
  config: PlainObject;

  constructor() {
    this.config = {};
  }

  resetConfig() {
    // The child class can set default config
    // by overriding this function.
    this.config = {};

    return this;
  }

  configure(config: PlainObject, replace = false) {
    this.config = replace ? config : { ...this.config, ...config };

    return this;
  }

  register() {
    return this;
  }

  unregister() {
    return this;
  }
}
