import { SubscriberService } from './subscriber-service';
import { OnApplicationBootstrap, OnModuleDestroy, OnModuleInit } from '@nestjs/common';

export abstract class SubscriberController implements OnApplicationBootstrap, OnModuleInit, OnModuleDestroy {

  protected subscribers: SubscriberService[];

  public async onModuleInit(): Promise<void> {
    this.subscribers = this.initializeSubscribers();

    for (const subscriber of this.subscribers) {
      await subscriber.subscribe();
    }
  }

  public async onApplicationBootstrap(): Promise<void> {
    for (const subscriber of this.subscribers) {
      await subscriber.start();
    }
  }

  public async onModuleDestroy(): Promise<void> {
    for (const subscriber of this.subscribers) {
      await subscriber.close();
    }
  }

  protected abstract initializeSubscribers(): SubscriberService[];
}
