import {
  AfterViewInit,
  Directive, EventEmitter, Input, Output, QueryList
} from '@angular/core';
import { UntypedFormGroup } from '@angular/forms';
import { ElementComponent } from './element-component.directive';
import { ClozeChildOverlay } from '../components/compound-elements/cloze/cloze-child-overlay.component';
import { LikertRadioButtonGroupComponent } from
  '../components/compound-elements/likert/likert-radio-button-group.component';
import { TableChildOverlay } from 'common/components/compound-elements/table/table-child-overlay.component';

@Directive()
export abstract class CompoundElementComponent extends ElementComponent implements AfterViewInit {
  @Output() childrenAdded = new EventEmitter<ElementComponent[]>();
  @Input() parentForm!: UntypedFormGroup;
  compoundChildren!: QueryList<ClozeChildOverlay | LikertRadioButtonGroupComponent | TableChildOverlay>;

  ngAfterViewInit(): void {
    this.childrenAdded.emit(this.getFormElementChildrenComponents());
  }

  abstract getFormElementChildrenComponents(): ElementComponent[];
}