/**
 * ValidateObjectKeysSize
 * @param object1
 * @param object2
 * @getters getResult(), hasErrors(), getErrorsList()
 * @result boolean
 * @description Validates if two objects have the same amount of keys
 */
export default class ValidateObjectKeysSize<T extends Object> {
  private result: boolean = false;
  private errors: boolean = false;
  private errmsg: string[] = [];

  constructor(object1: T, object2: T) {
    this.result = this.isObjectKeysSizeEqual(object1, object2);
  }

  get getResult() {
    return this.result;
  }

  get hasErrors() {
    return this.errors;
  }

  get getErrorsList() {
    return this.errmsg;
  }

  private showErrors() {
    this.errmsg.forEach((msg) => {
      console.log(msg);
    });
  }

  private isObjectKeysSizeEqual(object1: T, object2: T) {
    if (Object.keys(object1).length === Object.keys(object2).length) return true;

    this.addError("Object keys size are not equal.");
    this.setErrorState();
    return false;
  }

  private addError(msg: string) {
    this.errmsg.push(msg);
  }

  private setErrorState() {
    this.errors = true;
  }
}
